create_job
jest podstawowym połączeniem do umówienia się na rozmowę. nie musisz tworzyć nazwanego programu lub harmonogramu, aby to zrobić. gdzie tworzenie nazwanego programu/harmonogramu jest przydatne, jeśli masz kilka zadań, które chcą użyć tego wywołania. możesz po prostu odwoływać się do nazwanego harmonogramu programu, zamiast mieć kopię tego zadania w każdym zadaniu.
np. jeśli masz 5 zadań, które chcą wywołać pakiet MYPKG.ENTRY_PROG(param)
a każde zadanie po prostu używało innej wartości parametru, powiedziałbym, że chcesz użyć create_program
aby zdefiniować to wywołanie pl/sql, a następnie create_job
aby odwołać się do tej nazwy programu + ustaw wybraną wartość parametru. w ten sposób, jeśli chcesz zmienić nazwę API później lub coś takiego, nie musisz zmieniać pięciu oddzielnych zadań, aby to zrobić.
Jeśli twoje zadanie jest samodzielnym zadaniem, które wywołuje procedurę, która nie zostanie wywołana przez inne zadania, nie musisz używać create_program
/create_schedule
, po prostu użyj create_job
bezpośrednio.
jeden przykład, w którym użyłem create_program
było wywołanie uprzęży testowej. mój pakiet uprzęży testowej nazywa się pkg_test_harness.queue_tests(p_set_name in varchar2)
więc mam zdefiniowanych kilka zadań, które umieszczają w kolejce różne interfejsy API, które mają być uruchamiane o 9:00, 12:00 i 17:00. zamiast definiować każde wywołanie zadań osobno, po prostu wywołałem create_program
jak:
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.');
a następnie każde "zadanie" zostało zdefiniowane wskazując na program.
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.');
nie stworzyłem nazwanego harmonogramu, ponieważ te harmonogramy są unikalne dla poszczególnych zadań.