create_job
कॉल शेड्यूल करने के लिए मूल कॉल है। ऐसा करने के लिए आपको एक नामित प्रोग्राम या शेड्यूल बनाने की आवश्यकता नहीं है। जहां एक नामित प्रोग्राम/शेड्यूल बनाना उपयोगी है, यदि आपके पास ऐसे कई कार्य हैं जो इस कॉल का उपयोग करना चाहते हैं। आप प्रत्येक कार्य की एक प्रति रखने के बजाय केवल नामित प्रोग्राम शेड्यूल का संदर्भ दे सकते हैं।
जैसे यदि आपके पास 5 कार्य हैं जो आपके पैकेज को कॉल करना चाहते हैं MYPKG.ENTRY_PROG(param)
और प्रत्येक कार्य ने एक भिन्न पैरामीटर मान का उपयोग किया है, मैं कहूंगा कि आप create_program
. का उपयोग करना चाहते हैं उस pl/sql कॉल को परिभाषित करने के लिए और फिर create_job
उस प्रोग्राम के नाम को संदर्भित करने के लिए + पसंद का पैरामीटर मान सेट करें। इस तरह, यदि आप बाद में एपीआई का नाम बदलना चाहते हैं या कुछ और, तो आपको ऐसा करने के लिए पांच अलग-अलग नौकरियों को बदलने की जरूरत नहीं है।
यदि आपकी नौकरी केवल एक स्टैंडअलोन नौकरी है जो एक रूटीन कहती है जिसे अन्य नौकरियों द्वारा नहीं बुलाया जाएगा, तो आपको create_program
का उपयोग करने की आवश्यकता नहीं है /create_schedule
, बस उपयोग करें create_job
सीधे।
एक उदाहरण जहां मैंने create_program
. का प्रयोग किया है टेस्ट हार्नेस को कॉल करना था। मेरे परीक्षण हार्नेस पैकेज को pkg_test_harness.queue_tests(p_set_name in varchar2)
कहा जाता है इसलिए मेरे पास कुछ नौकरियां परिभाषित हैं जो विभिन्न एपीआई को सुबह 9 बजे, दोपहर 12 बजे और शाम 5 बजे चलाने के लिए प्रेरित करती हैं। प्रत्येक जॉब कॉल को अलग से परिभाषित करने के बजाय मैंने सिर्फ create_program
. कहा है जैसे:
dbms_output.put('Setting up TEST_HARNESS_ENQUEUE scheduler program...');
dbms_scheduler.create_program(program_name => 'TEST_HARNESS_ENQUEUE',
program_type => 'STORED_PROCEDURE',
program_action => 'pkg_test_harness.queue_tests',
number_of_arguments => 1,
enabled => false,
comments => 'Program to enqueue a set of API test for the test harness to run.');
dbms_scheduler.define_program_argument(program_name => 'TEST_HARNESS_ENQUEUE',
argument_name => 'p_set_name',
argument_position => 1,
argument_type => 'VARCHAR2',
default_value => '');
dbms_scheduler.enable (name => 'TEST_HARNESS_ENQUEUE');
dbms_output.put_line('done.');
और फिर प्रत्येक "नौकरी" को कार्यक्रम की ओर इशारा करते हुए परिभाषित किया गया था।
dbms_output.put('Setting up TEST_HARNESS_ENQUEUE_9AM scheduler job...');
dbms_scheduler.create_job(job_name => 'TEST_HARNESS_ENQUEUE_9AM',
program_name => 'TEST_HARNESS_ENQUEUE',
start_date => systimestamp,
end_date => null,
repeat_interval => 'freq=daily; byhour=9; byminute=0; bysecond=0;',
enabled => true,
auto_drop => false,
comments => 'Job to enqueue a set of API test for the test harness to run.');
dbms_scheduler.set_job_argument_value(job_name => 'TEST_HARNESS_ENQUEUE_9AM',
argument_position => 1,
argument_value => 'DAILY_9AM');
dbms_output.put_line('done.');
dbms_output.put('Setting up TEST_HARNESS_ENQUEUE_12PM scheduler job...');
dbms_scheduler.create_job(job_name => 'TEST_HARNESS_ENQUEUE_12PM',
program_name => 'TEST_HARNESS_ENQUEUE',
start_date => systimestamp,
end_date => null,
repeat_interval => 'freq=daily; byhour=12; byminute=0; bysecond=0;',
enabled => true,
auto_drop => false,
comments => 'Job to enqueue a set of API test for the test harness to run.');
मैंने एक नामित शेड्यूल नहीं बनाया, क्योंकि ये शेड्यूल अलग-अलग काम के लिए अद्वितीय हैं।