我是Oracle SQL的初学者。我正在使用Oracle SQL开发人员工具。我有两个程序,称为p1
和p2
。
如何使用链概念每天在特定时间逐个执行程序,这意味着一旦完全执行,我应该先执行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;
/
注意:除链条概念也欢迎
我猜问题就在这里:
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;
/