sql >> Database teknologi >  >> RDS >> Oracle

Oracle dbms_job.submit:Blanding af Synchronous og Asynchronous

Den enklest mulige fremgangsmåde ville være at tage l_job outputparametre fra dbms_job.submit og skriv derefter en loop, der kontrollerer, hvor mange af disse job værdier er i dba_jobs , afsluttes, når tallet er 0, og sover ellers via et opkald til dbms_lock.sleep i et rimeligt tidsrum. Det er klart, at du skal undgå at overskrive den aktuelle l_job variabel for at fange alle fem job. Noget lignende

CREATE TYPE num_tbl
    AS TABLE OF NUMBER;

PROCEDURE refresh_all_MViews AS
  l_job       BINARY_INTEGER;
  l_jobs      num_tbl;
BEGIN
  l_jobs.extend(5);
  dbms_job.submit (l_job, ...) ;
  l_jobs(1) := l_job;
  dbms_job.submit (l_job, ...) ;
  l_jobs(2) := l_job;
  dbms_job.submit (l_job, ...) ;
  l_jobs(3) := l_job;
  dbms_job.submit (l_job, ...) ;
  l_jobs(4) := l_job;
  dbms_job.submit (l_job, ...) ;
  l_jobs(5) := l_job;

  loop
    select count(*)
      into l_cnt
      from dba_jobs
     where job in (select column_value from table(l_jobs));

    if( l_cnt = 0 )
    then
      exit;
    end if;

    dbms_lock.sleep( 10 ); -- Sleep for 10 seconds
  end loop;

  refresh_Dependent_MViews;

END refresh_all_MViews;

Nu kunne du åbenbart ændre refresh_Independent_MViews procedure for at returnere samlingen af ​​jobnumre, der skal overvåges, så refresh_all_mviews procedure kalder refresh_independent_mviews , implementerer løkken og kalder derefter refresh_dependent_mviews .

Du kan blive mere sofistikeret ved at få dine job til at skrive til en tabel, der registrerer succes eller fiasko, eller sende en besked via Oracle AQ, som en anden proces lytter til for at sætte gang i den afhængige mview-opdatering. Det er sandsynligvis ikke nødvendigt i dette tilfælde, men det kan være, hvis dine afhængigheder bliver mere sofistikerede. Du kan uden tvivl også oprette en dbms_scheduler kæde, der ville gøre dette for dig.



  1. PostgreSQL bigserial &nextval

  2. PHP/MySQL - Lagring af array-data som JSON, dårlig praksis?

  3. hvordan man får værdi i array fra individuel forespørgsel

  4. Årsager til ikke at have et klynget indeks i SQL Server 2005