sql >> Database >  >> RDS >> Oracle

Een werk plannen om op een bepaald tijdstip te draaien met dbms_scheduler

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.




  1. MySQL-fout 1264:waarde buiten bereik voor kolom

  2. Nodejs express en belooft niet te doen wat ik verwacht

  3. Call for papers voor PGDay.IT 2011 is verlengd

  4. Hoe een kolom bij te werken met aaneenschakeling van twee andere kolommen in dezelfde tabel