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

पीएल/एसक्यूएल में समानांतर कॉल

आप dbms_job का उपयोग कर सकते हैं (या dbms_scheduler ) समानांतर में चलने वाली नौकरियों को जमा करने के लिए पैकेज। अगर आप dbms_job . का उपयोग कर रहे हैं , कार्य सबमिट करना लेन-देन का हिस्सा होगा, इसलिए लेन-देन पूरा होने के बाद कार्य प्रारंभ हो जाएंगे।

CREATE PACKAGE BODY pkg IS
    CREATE PROCEDURE do
    IS
      l_jobno pls_integer;
    BEGIN
        dbms_job.submit(l_jobno, 'begin other_pkg.other_proc; end;' );
        dbms_job.submit(l_jobno, 'begin other_pkg2.other_proc2; end;' );
        dbms_job.submit(l_jobno, 'begin other_pkg3.other_proc3; end;' );
    END;
END;

यदि आप dbms_scheduler . का उपयोग कर रहे हैं , एक नई नौकरी बनाना लेन-देन नहीं है (अर्थात हर बार जब आप एक नई नौकरी बनाते हैं तो इसमें निहित प्रतिबद्धता होती है) जो लेन-देन में अन्य कार्य किए जाने पर लेन-देन की अखंडता के साथ समस्या पैदा कर सकता है जहां इस प्रक्रिया को कहा जाता है। दूसरी ओर, यदि आप dbms_scheduler . का उपयोग कर रहे हैं , पहले से कार्य सृजित करना और उन्हें केवल प्रक्रिया से चलाना आसान हो सकता है (या dbms_scheduler का उपयोग करने के लिए) एक श्रृंखला बनाने के लिए जो किसी अन्य क्रिया या घटना के जवाब में नौकरी चलाती है जैसे कि एक कतार में संदेश डालना)।

बेशक, किसी भी समाधान के साथ, आपको इन तीन नौकरियों की प्रगति की निगरानी के लिए बुनियादी ढांचे का निर्माण करना होगा, यह मानते हुए कि आप परवाह करते हैं कि वे कब और क्या सफल होते हैं (और क्या वे त्रुटियां उत्पन्न करते हैं)।

यदि आप DBMS_SCHEDULER . का उपयोग करने जा रहे हैं

  • डायनेमिक SQL का उपयोग करने की कोई आवश्यकता नहीं है। आप EXECUTE IMMEDIATE . को छोड़ सकते हैं और बस DBMS_SCHEDULER पर कॉल करें पैकेज की प्रक्रियाएँ सीधे वैसे ही जैसे आप किसी अन्य प्रक्रिया में करते हैं।
  • जब आप RUN_JOB पर कॉल करते हैं , आपको दूसरे पैरामीटर में पास करने की आवश्यकता है। use_current_session पैरामीटर नियंत्रित करता है कि कार्य वर्तमान सत्र (और ब्लॉक) में चलता है या क्या यह एक अलग सत्र में चलता है (जिस स्थिति में वर्तमान सत्र जारी रह सकता है और अन्य काम कर सकता है)। चूंकि आप समानांतर में कई कार्य चलाना चाहते हैं, इसलिए आपको false . के मान में पास करना होगा ।
  • हालांकि इसकी आवश्यकता नहीं है, लेकिन एक बार (auto_drop के साथ) रोजगार सृजित करना अधिक पारंपरिक होगा। असत्य पर सेट करें) और फिर बस उन्हें अपनी प्रक्रिया से चलाएँ।

तो आप शायद पैकेज के बाहर नौकरियां बनाना चाहेंगे और फिर आपकी प्रक्रिया बस बन जाएगी

CREATE PACKAGE BODY pkg IS
    CREATE PROCEDURE do
    IS
    BEGIN
        DBMS_SCHEDULER.RUN_JOB('job_other_pkg.other_proc', false);
        DBMS_SCHEDULER.RUN_JOB('job_other_pkg2.other_proc2', false);
        DBMS_SCHEDULER.RUN_JOB('job_other_pkg3.other_proc3', false);
    END;
END;


  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 SQL डेवलपर में एक नया डेटाबेस और नया कनेक्शन बनाना

  2. पीएल/एसक्यूएल - जहां खंड में सूची चर का प्रयोग करें

  3. ओरेकल एसक्यूएल में एक विशिष्ट चरित्र तक एक सबस्ट्रिंग का चयन कैसे करें?

  4. Oracle PL/SQL:तालिका से CSV में डेटा निर्यात करें

  5. संख्याओं की एक श्रृंखला से किसी भी लापता संख्या की जांच कैसे करें?