Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle dbms_job.submit:सिंक्रोनस और एसिंक्रोनस का मिश्रण

सबसे आसान संभव तरीका यह होगा कि 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 . भी बना सकते हैं चेन जो आपके लिए ऐसा करेगी।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle का उपयोग करके INTO का चयन करें

  2. SQL IN क्लॉज में 1000 से अधिक प्रविष्टियाँ डालने के लिए TUPLES का उपयोग करना

  3. JdbcTemplate - SQL MERGE का उपयोग करके Oracle BLOB डालें या अपडेट करें

  4. अपने Oracle सत्र में दिनांक स्वरूप कैसे बदलें

  5. Oci_connect फ़ंक्शन Oracle के साथ CentOS में अपरिभाषित है