sql >> データベース >  >> RDS >> Oracle

dbms_schedulerを使用して特定の時間に実行するように作業をスケジュールする方法

    create_job 通話をスケジュールするための基本的な通話です。これを行うために、名前付きプログラムやスケジュールを作成する必要はありません。名前付きプログラム/スケジュールの作成が役立つのは、この呼び出しを使用したいジョブが複数ある場合です。各ジョブにそのコピーを保持させる代わりに、指定されたプログラムスケジュールを参照することができます。

    例えばパッケージを呼び出したいジョブが5つある場合MYPKG.ENTRY_PROG(param) そして、各ジョブは異なるパラメータ値を使用しただけです。create_programを使用したいと思います。 そのpl/sql呼び出しを定義してから、create_job そのプログラム名を参照するには+選択したパラメータ値を設定します。そうすれば、後でAPIの名前を変更したい場合など、これを行うために5つの個別のジョブを変更する必要はありません。

    ジョブが、他のジョブによって呼び出されないルーチンを呼び出すスタンドアロンジョブである場合は、create_programを使用する必要はありません。 / create_schedulecreate_jobを使用するだけです 直接。

    create_programを使用した1つの例 テストハーネスを呼ぶことでした。私のテストハーネスパッケージは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.');
    

    これらのスケジュールは個々のジョブに固有であるため、名前付きスケジュールは作成しませんでした。




    1. jqueryから渡された変数からPDOの配列を作成します

    2. MySQLのユーザーにデータを入力するさまざまな方法

    3. このutf8文字を変換できますか?

    4. ADO.netSqlTransactionはパフォーマンスを向上させます