create_job
är det grundläggande samtalet för att boka ett samtal. du behöver inte skapa ett namngivet program eller schema för att göra detta. där det är användbart att skapa ett namngivet program/schema, är om du har flera jobb som vill använda detta anrop. du kan bara referera till det namngivna programschemat istället för att låta varje jobb ha en kopia av det.
t.ex. om du hade 5 jobb som ville ringa ditt paket MYPKG.ENTRY_PROG(param)
och varje jobb använde bara ett annat parametervärde, jag skulle säga att du vill använda create_program
för att definiera det pl/sql-anropet och sedan create_job
för att referera till det programnamnet + ställ in önskat parametervärde. på det sättet, om du vill byta namn på API:et senare eller något, behöver du inte ändra fem separata jobb för att göra detta.
Om ditt jobb bara är ett fristående jobb som anropar en rutin som inte kommer att anropas av andra jobb, behöver du inte använda create_program
/create_schedule
, använd bara create_job
direkt.
ett exempel där jag använde create_program
var att ringa en testsele. mitt testkabelpaket heter pkg_test_harness.queue_tests(p_set_name in varchar2)
så jag har några jobb definierade som köar olika API:er för att köras kl. 09.00, 12.00 och 17.00. istället för att definiera varje jobbanrop separat kallade jag bara create_program
gillar:
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.');
och sedan definierades varje "jobb" som pekade på programmet.
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.');
Jag skapade inte ett namngivet schema, eftersom dessa scheman är unika för det enskilda jobbet.