如何使用链在oracle sql开发人员中一个接一个地执行过程?

时间:2018-06-22 06:34:18

标签: sql oracle job-scheduling chain

我是Oracle SQL的初学者。我正在使用Oracle SQL开发人员工具。我有两个过程,分别为p1p2

如何使用链概念每天在特定时间一个接一个地执行过程,这意味着一旦完全完成,我应该首先执行p1。之后,我必须每天在特定时间执行p2

就我而言,我必须在3.00时钟执行。供您参考,请参见下面的示例代码。谁能解决这个问题?预先感谢

BEGIN 
    DBMS_SCHEDULER.CREATE_CHAIN (
       chain_name            =>  'my_chain1',
       rule_set_name         =>  NULL,
       evaluation_interval   =>  NULL,
       comments              =>  NULL);
    END;
    /

    BEGIN
     DBMS_SCHEDULER.DEFINE_CHAIN_STEP('my_chain1', 'stepA', 'P1');
     DBMS_SCHEDULER.DEFINE_CHAIN_STEP('my_chain1', 'stepB', 'P2');

    END;
    /

    BEGIN
     DBMS_SCHEDULER.DEFINE_CHAIN_RULE('my_chain1', 'TRUE', 'START stepA');
     DBMS_SCHEDULER.DEFINE_CHAIN_RULE('my_chain1', 'stepA COMPLETED', 'Start stepB');
     DBMS_SCHEDULER.DEFINE_CHAIN_RULE('my_chain1', 'stepB COMPLETED', 'END');
    END;
    /

    BEGIN
     DBMS_SCHEDULER.ENABLE('my_chain1');
    END;
    /

    BEGIN
     DBMS_SCHEDULER.CREATE_JOB (
       job_name        => 'chain_job_1',
       job_type        => 'CHAIN',
       job_action      => 'my_chain1',
       repeat_interval => 'freq=daily;byhour=13;byminute=0;bysecond=0',  //In my case I should execute afternoon 1.00 clock so I used 13.00 in byhour
       enabled         => TRUE);
    END;
    /

注意:除连锁概念外,也欢迎

1 个答案:

答案 0 :(得分:1)

我猜问题在这里:

DEFINE_CHAIN_STEP('my_chain1', 'stepA', 'P1');  
DEFINE_CHAIN_STEP('my_chain1', 'stepB', 'P2');

P1,p2-必须是调度程序(检查dbms_scheduler.create_program)或调度程序链。

但是问题是您是否真的需要调度程序链。恕我直言,您正在尝试过度设计

   BEGIN
     DBMS_SCHEDULER.CREATE_JOB (
       job_name        => 'simple_plsqlBlock_job',
       job_type        => 'PLSQL_BLOCK',
       job_action      => 'begin p1;
                                 p2; 
                           end;',
       repeat_interval => 'freq=daily;byhour=13;byminute=0;bysecond=0',  //In my case I should execute afternoon 1.00 clock so I used 13.00 in byhour
       enabled         => TRUE);
    END;
    /