create_job
is de basisoproep om een oproep te plannen. u hoeft hiervoor geen benoemd programma of schema te maken. waar het maken van een benoemd programma/schema handig is, is als u meerdere taken heeft die deze oproep willen gebruiken. u kunt gewoon verwijzen naar het genoemde programmaschema in plaats van dat elke taak daar een kopie van heeft.
bijv. als u 5 banen had die uw pakket MYPKG.ENTRY_PROG(param)
wilden noemen en elke taak heeft net een andere parameterwaarde gebruikt, ik zou zeggen dat je create_program
wilt gebruiken om die pl/sql-aanroep te definiëren en vervolgens create_job
om naar die programmanaam te verwijzen + stel de gewenste parameterwaarde in. op die manier, als je de API later wilt hernoemen of zoiets, hoef je geen vijf aparte jobs te veranderen om dit te doen.
Als uw taak slechts een op zichzelf staande taak is die een routine oproept die niet door andere taken wordt aangeroepen, hoeft u create_program
niet te gebruiken /create_schedule
, gebruik gewoon create_job
direct.
een voorbeeld waarbij ik create_program
. gebruikte was om een testharnas te bellen. mijn testharnaspakket heet pkg_test_harness.queue_tests(p_set_name in varchar2)
dus ik heb een paar taken gedefinieerd die verschillende API's in de wachtrij plaatsen om te worden uitgevoerd om 9.00 uur, 12.00 uur en 17.00 uur. in plaats van elke taakoproep afzonderlijk te definiëren, heb ik zojuist create_program
gebeld zoals:
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.');
en vervolgens werd elke "taak" gedefinieerd die naar het programma wees.
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.');
ik heb geen genoemd schema gemaakt, omdat deze schema's uniek zijn voor de individuele taak.