create_job
je základní výzva k naplánování hovoru. k tomu nemusíte vytvářet pojmenovaný program nebo plán. tam, kde je vytvoření pojmenovaného programu/plánu užitečné, je situace, kdy máte několik úloh, které chtějí toto volání použít. můžete pouze odkazovat na pojmenovaný programový plán namísto toho, aby každá úloha uchovávala jeho kopii.
např. pokud jste měli 5 úloh, které chtěly zavolat svůj balíček MYPKG.ENTRY_PROG(param)
a každá úloha prostě používala jinou hodnotu parametru, řekl bych, že chcete použít create_program
k definování volání pl/sql a poté create_job
odkaz na název programu + nastavte hodnotu parametru podle výběru. takže pokud budete chtít API později přejmenovat nebo tak něco, nemusíte kvůli tomu měnit pět samostatných úloh.
Pokud je vaše úloha pouze samostatnou úlohou, která volá rutinu, která nebude vyvolána jinými úlohami, nemusíte používat create_program
/create_schedule
, stačí použít create_job
přímo.
jeden příklad, kde jsem použil create_program
bylo zavolat zkušební postroj. můj balíček testovacího svazku se nazývá pkg_test_harness.queue_tests(p_set_name in varchar2)
takže mám definováno několik úloh, které řadí do fronty různá rozhraní API, která se mají spouštět v 9:00, 12:00 a 17:00. místo toho, abych definoval každé volání úlohy samostatně, zavolal jsem pouze create_program
jako:
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 pak byla každá „úloha“ definována směřující k programu.
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.');
Nevytvořil jsem pojmenovaný rozvrh, protože tyto rozvrhy jsou jedinečné pro jednotlivou úlohu.