Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle dbms_job.submit:Mieszanie synchronicznych i asynchronicznych

Najprostszym możliwym podejściem byłoby wzięcie l_job parametry wyjściowe z dbms_job.submit a następnie napisz pętlę, która sprawdza, ile z tych job wartości są w dba_jobs , kończy działanie, gdy licznik wynosi 0, w przeciwnym razie zasypia przez wywołanie dbms_lock.sleep przez rozsądny okres czasu. Oczywiście musisz uniknąć nadpisywania bieżącego l_job zmienna w celu przechwycenia wszystkich pięciu zadań. Coś jak

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;

Teraz możesz oczywiście zmodyfikować refresh_Independent_MViews procedura zwracania kolekcji numerów zadań, które mają być monitorowane, tak aby refresh_all_mviews wywołania procedur refresh_independent_mviews , implementuje pętlę, a następnie wywołuje refresh_dependent_mviews .

Możesz stać się bardziej wyrafinowany, gdy zadania zapisują się do tabeli, która rejestruje sukces lub niepowodzenie, lub wysyła wiadomość za pośrednictwem Oracle AQ, której nasłuchuje inny proces w celu rozpoczęcia zależnego odświeżenia mview. Prawdopodobnie nie jest to potrzebne w tym przypadku, ale może być, jeśli twoje zależności staną się bardziej wyrafinowane. Niewątpliwie możesz również utworzyć dbms_scheduler łańcuch, który zrobi to za Ciebie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. zablokować zalogowanego użytkownika w oracle przez java

  2. Usuwanie DUŻO danych w Oracle

  3. SQL, aby dodać kolumnę i komentarz w tabeli w jednym poleceniu

  4. Wybieranie wartości ze zmiennej tabeli / tablicy Oracle?

  5. problem z hibernacją oracle10g