create_job
通話をスケジュールするための基本的な通話です。これを行うために名前付きのプログラムやスケジュールを作成する必要はありません。名前付きプログラム/スケジュールの作成が役立つのは、この呼び出しを使用するジョブが複数ある場合です。各ジョブにそのコピーを保持させる代わりに、名前付きのプログラム スケジュールを参照するだけで済みます。
たとえば、パッケージを呼び出したいジョブが 5 つMYPKG.ENTRY_PROG(param)
あり、各ジョブが異なるパラメーター値を使用した場合create_program
、その pl/sql 呼び出しを定義してから、create_job
そのプログラム名を参照し、選択したパラメーター値を設定するために使用したいと思います。 . そうすれば、後で API の名前を変更したい場合などに、これを行うために 5 つの個別のジョブを変更する必要がありません。
ジョブが、他のジョブから呼び出されないルーチンを呼び出す単なるスタンドアロン ジョブである場合は、create_program
/を使用する必要はなく、直接 create_schedule
使用するだけです。create_job
私が使用した 1 つの例はcreate_program
、テスト ハーネスを呼び出すことでした。テスト ハーネス パッケージが呼び出されるpkg_test_harness.queue_tests(p_set_name in varchar2)
ので、午前 9 時、午後 12 時、および午後 5 時に実行されるさまざまな API をキューに入れるいくつかのジョブが定義されています。create_program
各ジョブ呼び出しを個別に定義する代わりに、次のように呼び出しました。
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.');
次に、各「ジョブ」がプログラムを指すように定義されました。
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.');
これらのスケジュールは個々のジョブに固有であるため、名前付きスケジュールは作成しませんでした。