Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle dbms_job.submit:Mencampur Sinkron dan Asinkron

Pendekatan paling sederhana yang mungkin adalah mengambil l_job parameter keluaran dari dbms_job.submit dan kemudian tulis loop yang memeriksa berapa banyak job itu nilai ada di dba_jobs , keluar saat hitungannya 0, dan sebaliknya tidur melalui panggilan ke dbms_lock.sleep untuk jangka waktu yang wajar. Jelas, Anda harus menghindari menimpa l_job saat ini variabel untuk menangkap semua lima pekerjaan. Sesuatu seperti

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;

Sekarang, Anda jelas dapat memodifikasi refresh_Independent_MViews prosedur untuk mengembalikan kumpulan nomor pekerjaan yang perlu dipantau agar refresh_all_mviews prosedur memanggil refresh_independent_mviews , mengimplementasikan loop, lalu memanggil refresh_dependent_mviews .

Anda bisa menjadi lebih canggih dengan meminta pekerjaan Anda menulis ke tabel yang mencatat keberhasilan atau kegagalan atau mengirim pesan melalui Oracle AQ yang didengarkan oleh proses lain untuk memulai penyegaran mview dependen. Itu mungkin tidak diperlukan dalam kasus ini tetapi mungkin jika dependensi Anda menjadi lebih canggih. Tidak diragukan lagi, Anda juga dapat membuat dbms_scheduler rantai yang akan melakukan ini untuk Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kelompokkan dengan menyebabkan peningkatan besar dalam waktu eksekusi kueri

  2. Simulasi kueri Oracle DB yang sudah berjalan lama

  3. Kesalahan:PLS-00428:klausa into diharapkan dalam pernyataan pilih ini

  4. Bagaimana cara membuat database baru setelah awalnya menginstal database Oracle 11g Express Edition?

  5. Bagaimana Mengubah Struktur Tabel di Oracle?