सबसे आसान संभव तरीका यह होगा कि l_job
. लिया जाए dbms_job.submit
. से आउटपुट पैरामीटर और फिर एक लूप लिखें जो जांचता है कि उनमें से कितने job
मान dba_jobs
. में हैं , बाहर निकल जाता है जब गिनती 0 होती है, और अन्यथा dbms_lock.sleep
पर कॉल के माध्यम से सो जाती है उचित समय के लिए। जाहिर है, आपको मौजूदा l_job
. को ओवरराइट करने से बचना होगा सभी पांच नौकरियों पर कब्जा करने के लिए चर। कुछ इस तरह
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;
अब, आप स्पष्ट रूप से refresh_Independent_MViews
. को संशोधित कर सकते हैं कार्य संख्याओं के संग्रह को वापस करने की प्रक्रिया जिनकी निगरानी करने की आवश्यकता है ताकि refresh_all_mviews
प्रक्रिया कॉल refresh_independent_mviews
, लूप को लागू करता है, और फिर refresh_dependent_mviews
. को कॉल करता है .
आप अपनी नौकरियों को एक ऐसी तालिका में लिख कर अधिक परिष्कृत हो सकते हैं जो सफलता या विफलता को रिकॉर्ड करती है या ओरेकल एक्यू के माध्यम से एक संदेश भेजती है कि एक अन्य प्रक्रिया निर्भर एमव्यू रीफ्रेश को शुरू करने के लिए सुनती है। शायद इस मामले में इसकी आवश्यकता नहीं है, लेकिन हो सकता है कि आपकी निर्भरता अधिक परिष्कृत हो। निस्संदेह, आप एक dbms_scheduler
. भी बना सकते हैं चेन जो आपके लिए ऐसा करेगी।