create_job
er det grundlæggende opkald til at planlægge et opkald. du behøver ikke at oprette et navngivet program eller tidsplan for at gøre dette. hvor det er nyttigt at oprette et navngivet program/skema, er hvis du har flere jobs, der ønsker at bruge dette opkald. du kan blot henvise til den navngivne programplan i stedet for at lade hvert job have en kopi af det.
for eksempel. hvis du havde 5 job, der ville ringe til din pakke MYPKG.ENTRY_PROG(param)
og hvert job bare brugte en anden parameterværdi, vil jeg sige, at du vil bruge create_program
for at definere det pl/sql-kald og derefter create_job
for at referere til det programnavn + indstil den valgte parameterværdi. på den måde, hvis du vil omdøbe API'en senere eller noget, behøver du ikke ændre fem separate job for at gøre dette.
Hvis dit job bare er et selvstændigt job, der kalder en rutine, der ikke vil blive kaldt af andre job, så behøver du ikke bruge create_program
/create_schedule
, brug bare create_job
direkte.
et eksempel, hvor jeg brugte create_program
var at kalde en prøvesele. min testselepakke hedder pkg_test_harness.queue_tests(p_set_name in varchar2)
så jeg har et par job defineret, der sætter forskellige API'er i kø til at blive kørt kl. 9.00, 12.00 og 17.00. i stedet for at definere hvert jobkald separat, kaldte jeg bare create_program
som:
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.');
og derefter blev hvert "job" defineret, der pegede 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.');
Jeg har ikke oprettet et navngivet skema, da disse skemaer er unikke for det enkelte job.