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.