Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách lên lịch chạy công việc vào thời điểm cụ thể bằng dbms_scheduler

create_job là cách gọi cơ bản để lên lịch cuộc gọi. bạn không phải tạo một chương trình hoặc lịch trình đã đặt tên để thực hiện việc này. trong đó việc tạo một chương trình / lịch biểu được đặt tên là hữu ích, nếu bạn có một số công việc muốn sử dụng lệnh gọi này. bạn chỉ có thể tham khảo lịch trình chương trình đã đặt tên thay vì yêu cầu mỗi công việc giữ một bản sao của nó.

ví dụ. nếu bạn có 5 công việc muốn gọi gói của mình MYPKG.ENTRY_PROG(param) và mỗi công việc chỉ sử dụng một giá trị tham số khác nhau, tôi muốn nói rằng bạn muốn sử dụng create_program để xác định cuộc gọi pl / sql đó và sau đó create_job để tham chiếu đến tên chương trình đó + thiết lập giá trị tham số của sự lựa chọn. theo cách đó, nếu bạn muốn đổi tên API sau này hoặc một cái gì đó, bạn không phải thay đổi năm công việc riêng biệt để thực hiện việc này.

Nếu công việc của bạn chỉ là một công việc độc lập gọi một quy trình mà các công việc khác sẽ không gọi, thì bạn không cần phải sử dụng create_program / create_schedule , chỉ cần sử dụng create_job trực tiếp.

một ví dụ mà tôi đã sử dụng create_program là để gọi một dây nịt thử nghiệm. gói khai thác thử nghiệm của tôi được gọi là pkg_test_harness.queue_tests(p_set_name in varchar2) vì vậy tôi có một số công việc được xác định trong đó xếp hàng các API khác nhau để chạy lúc 9 giờ sáng, 12 giờ trưa và 5 giờ chiều. thay vì xác định từng lệnh gọi công việc riêng biệt, tôi chỉ gọi create_program như:

    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.');

và sau đó mỗi "công việc" được xác định trỏ đến chương trình.

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.');

tôi đã không tạo một lịch trình được đặt tên, vì những lịch biểu này là duy nhất cho công việc cá nhân.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle vấn đề với báo cáo SQL

  2. Chèn ngày từ java vào Oracle DB

  3. Oracle sql MERGE INTO với một mệnh đề where

  4. Hàm MONTHS_BETWEEN () trong Oracle

  5. Cách xuất kết quả truy vấn Oracle sang tệp JSON khi sử dụng SQLcl