当前位置:Gxlcms > 数据库问题 > oracle 中的chain job

oracle 中的chain job

时间:2021-07-01 10:21:17 帮助过:21人阅读

> select * from v$version where rownum<2; BANNER ---------------------------------------------------------------- Oracle Database 10g Release 10.2.0.3.0 - 64bit Production --创建演示表及序列 CREATE TABLE tb_schduler ( id NUMBER (10) NOT NULL, descr VARCHAR2 (20) NOT NULL, cr_date DATE NOT NULL, CONSTRAINT tb_schduler_pk PRIMARY KEY (id) ); CREATE SEQUENCE tb_schduler_seq; 1、创建程序 --下面定义了3个需要用到的程序program,注意这里的program不等同于procedure或者package,但是可以调用procedure或package --下面的program主要是用于插入记录到测试表 BEGIN DBMS_SCHEDULER.create_program ( program_name => test_proc_1, program_type => PLSQL_BLOCK, -->这里的类型定义为PLSQL_BLOCK,支持STORED PROCEDURE/EXECUTEABLE program_action => BEGIN INSERT INTO tb_schduler (id, descr, cr_date) VALUES (tb_schduler_seq.NEXTVAL, ‘‘test_proc_1‘‘, SYSDATE); COMMIT; END;, enabled => TRUE, comments => Program for first link in the chain.); DBMS_SCHEDULER.create_program ( program_name => test_proc_2, program_type => PLSQL_BLOCK, program_action => BEGIN INSERT INTO tb_schduler (id, descr, cr_date) VALUES (tb_schduler_seq.NEXTVAL, ‘‘test_proc_2‘‘, SYSDATE); COMMIT; END;, enabled => TRUE, comments => Program for second link in the chain.); DBMS_SCHEDULER.create_program ( program_name => test_proc_3, program_type => PLSQL_BLOCK, program_action => BEGIN INSERT INTO tb_schduler (id, descr, cr_date) VALUES (tb_schduler_seq.NEXTVAL, ‘‘test_proc_3‘‘, SYSDATE); COMMIT; END;, enabled => TRUE, comments => Program for last link in the chain.); END; / 2、创建chain --创建chain比较简单,通常只需要定义一个chain名字即可,主要是用于关联后续定义rule及step BEGIN DBMS_SCHEDULER.create_chain ( chain_name => test_chain_1, -->定义chain的名字 rule_set_name => NULL, -->可以指定规则集的名字 evaluation_interval => NULL, comments => A test chain.); END; / 3、定义chain步骤 --下面定义chain的每一个步骤以及其对应的program_name,也就是每一步需要做什么 BEGIN DBMS_SCHEDULER.define_chain_step ( chain_name => test_chain_1, --->chain的名字 step_name => chain_step_1, --->步骤地名字 program_name => test_proc_1); --->当前步骤应执行的相应程序 DBMS_SCHEDULER.define_chain_step ( chain_name => test_chain_1, step_name => chain_step_2, program_name => test_proc_2); DBMS_SCHEDULER.define_chain_step ( chain_name => test_chain_1, step_name => chain_step_3, program_name => test_proc_3); END; / 4、定义chain规则 --用于定义chain根据执行结果应该如何跳转的问题,每个CHAIN 规则都拥有condition和action 属性, --当满足condition 时则执行action中指定的step。使用DBMS_SCHEDULER.DEFINE_CHAIN_RULE 过程 BEGIN DBMS_SCHEDULER.define_chain_rule ( chain_name => test_chain_1, condition => TRUE, action => START "CHAIN_STEP_1", rule_name => chain_rule_1, comments => First link in the chain.); DBMS_SCHEDULER.define_chain_rule ( chain_name => test_chain_1, condition => "CHAIN_STEP_1" COMPLETED, action => START "CHAIN_STEP_2", rule_name => chain_rule_2, comments => Second link in the chain.); DBMS_SCHEDULER.define_chain_rule ( chain_name => test_chain_1, condition => "CHAIN_STEP_2" COMPLETED, action => START "CHAIN_STEP_3", rule_name => chain_rule_3, comments => Third link in the chain.); DBMS_SCHEDULER.define_chain_rule ( chain_name => test_chain_1, condition => "CHAIN_STEP_3" COMPLETED, action => END, rule_name => chain_rule_4, comments => End of the chain.); END; / 5、激活chain BEGIN DBMS_SCHEDULER.enable (test_chain_1); END; / 6、将chain添加到job BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => test_chain_1_job, job_type => CHAIN, job_action => test_chain_1, repeat_interval => freq=minutely; interval=2, start_date => SYSTIMESTAMP, end_date => SYSTIMESTAMP + (1/48), enabled => FALSE); --->值为TRUE用于激活JOB END; / 7、手动执行chain BEGIN DBMS_SCHEDULER.run_chain ( chain_name => test_chain_1, job_name => test_chain_1_run_job, start_steps => chain_step_1,chain_step_3); -->可以指定单步或多步以及所有步骤 END; / scott@CNMMBO> select * from tb_schduler; ID DESCR CR_DATE ---------- -------------------- ----------------- 1 test_proc_1 20131203 14:36:03 2 test_proc_3 20131203 14:36:04 --激活job scott@CNMMBO> exec dbms_scheduler.enable(test_chain_1_job); PL/SQL procedure successfully completed.

 

参考自:https://blog.csdn.net/leshami/article/details/17096009

oracle 中的chain job

标签:根据   run_job   value   begin   star   ted   acl   过程   varchar2   

人气教程排行