sql >> Databasteknik >  >> RDS >> Oracle

Oracle dbms_job.submit:Blandar Synchronous och Asynchronous

Det enklaste möjliga tillvägagångssättet skulle vara att ta l_job utdataparametrar från dbms_job.submit och skriv sedan en slinga som kontrollerar hur många av dessa job värden finns i dba_jobs , avslutas när antalet är 0, och annars sover via ett samtal till dbms_lock.sleep under en rimlig tid. Självklart måste du undvika att skriva över det nuvarande l_job variabel för att fånga alla fem jobben. Något liknande

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 kan du uppenbarligen ändra refresh_Independent_MViews procedur för att returnera samlingen av jobbnummer som behöver övervakas så att refresh_all_mviews proceduren anropar refresh_independent_mviews , implementerar slingan och anropar sedan refresh_dependent_mviews .

Du kan bli mer sofistikerad genom att låta dina jobb skriva till en tabell som registrerar framgång eller misslyckande eller skicka ett meddelande via Oracle AQ som en annan process lyssnar på för att starta den beroende mview-uppdateringen. Det behövs förmodligen inte i det här fallet, men det kan vara om dina beroenden blir mer sofistikerade. Utan tvekan kan du också skapa en dbms_scheduler kedja som skulle göra detta åt dig.



  1. Har Oracle NetSuite Advanced PDF Template funktioner för grupp efter och SUM?

  2. hur får man värde från mysql-tabellen beställd av en annan tabell?

  3. Att välja rader från en tabell med hjälp av värden hämtade från en annan tabell MYSQL

  4. Återanvänd MySQL-anslutning PHP-objekt arv