create_job
adalah panggilan dasar untuk menjadwalkan panggilan. Anda tidak perlu membuat program atau jadwal bernama untuk melakukan ini. di mana membuat program/jadwal bernama berguna, adalah jika Anda memiliki beberapa pekerjaan yang ingin menggunakan panggilan ini. Anda bisa mereferensikan jadwal program yang disebutkan alih-alih meminta setiap pekerjaan menyimpan salinannya.
misalnya jika Anda memiliki 5 pekerjaan yang ingin memanggil paket Anda MYPKG.ENTRY_PROG(param)
dan setiap pekerjaan hanya menggunakan nilai parameter yang berbeda, menurut saya Anda ingin menggunakan create_program
untuk mendefinisikan panggilan pl/sql itu dan kemudian create_job
untuk mereferensikan nama program itu + mengatur nilai parameter pilihan. dengan begitu, jika Anda ingin mengganti nama API nanti atau sesuatu, Anda tidak perlu mengubah lima pekerjaan terpisah untuk melakukan ini.
Jika pekerjaan Anda hanyalah pekerjaan mandiri yang memanggil rutinitas yang tidak akan dipanggil oleh pekerjaan lain, maka Anda tidak perlu menggunakan create_program
/create_schedule
, cukup gunakan create_job
secara langsung.
salah satu contoh di mana saya menggunakan create_program
adalah untuk memanggil test harness. paket test harness saya bernama pkg_test_harness.queue_tests(p_set_name in varchar2)
jadi saya memiliki beberapa pekerjaan yang ditetapkan yang mengantrekan berbagai API untuk dijalankan pada jam 9 pagi, 12 siang dan 5 sore. alih-alih mendefinisikan setiap panggilan pekerjaan secara terpisah, saya hanya memanggil create_program
seperti:
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.');
dan kemudian setiap "pekerjaan" didefinisikan menunjuk ke program.
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.');
saya tidak membuat jadwal bernama, karena jadwal ini unik untuk pekerjaan individu.