आप 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;