oracle 中的chain job

1--演示环境 2scott@CNMMBO> select * from v$version where rownum<2; 3 4BANNER 5---------------------------------------------------------------- 6Oracle Database 10g Release 10.2.0.3.0 - 64bit Production 7 8--创建演示表及序列 9CREATE TABLE tb_schduler 10( 11 id NUMBER (10) NOT NULL, 12 descr VARCHAR2 (20) NOT NULL, 13 cr_date DATE NOT NULL, 14 CONSTRAINT tb_schduler_pk PRIMARY KEY (id) 15); 16 17CREATE SEQUENCE tb_schduler_seq; 18 191、创建程序 20--下面定义了3个需要用到的程序program,注意这里的program不等同于procedure或者package,但是可以调用procedure或package 21--下面的program主要是用于插入记录到测试表 22BEGIN 23 DBMS_SCHEDULER.create_program ( 24 program_name => 'test_proc_1', 25 program_type => 'PLSQL_BLOCK', -->这里的类型定义为PLSQL_BLOCK,支持STORED PROCEDURE/EXECUTEABLE 26 program_action => 'BEGIN 27 INSERT INTO tb_schduler (id, descr, cr_date) 28 VALUES (tb_schduler_seq.NEXTVAL, ''test_proc_1'', SYSDATE); 29 COMMIT; 30 END;', 31 enabled => TRUE, 32 comments => 'Program for first link in the chain.'); 33 34 DBMS_SCHEDULER.create_program ( 35 program_name => 'test_proc_2', 36 program_type => 'PLSQL_BLOCK', 37 program_action => 'BEGIN 38 INSERT INTO tb_schduler (id, descr, cr_date) 39 VALUES (tb_schduler_seq.NEXTVAL, ''test_proc_2'', SYSDATE); 40 COMMIT; 41 END;', 42 enabled => TRUE, 43 comments => 'Program for second link in the chain.'); 44 45 DBMS_SCHEDULER.create_program ( 46 program_name => 'test_proc_3', 47 program_type => 'PLSQL_BLOCK', 48 program_action => 'BEGIN 49 INSERT INTO tb_schduler (id, descr, cr_date) 50 VALUES (tb_schduler_seq.NEXTVAL, ''test_proc_3'', SYSDATE); 51 COMMIT; 52 END;', 53 enabled => TRUE, 54 comments => 'Program for last link in the chain.'); 55END; 56/ 57 582、创建chain 59--创建chain比较简单,通常只需要定义一个chain名字即可,主要是用于关联后续定义rule及step 60BEGIN 61 DBMS_SCHEDULER.create_chain ( 62 chain_name => 'test_chain_1', -->定义chain的名字 63 rule_set_name => NULL, -->可以指定规则集的名字 64 evaluation_interval => NULL, 65 comments => 'A test chain.'); 66END; 67/ 68 693、定义chain步骤 70--下面定义chain的每一个步骤以及其对应的program_name,也就是每一步需要做什么 71BEGIN 72 DBMS_SCHEDULER.define_chain_step ( 73 chain_name => 'test_chain_1', --->chain的名字 74 step_name => 'chain_step_1', --->步骤地名字 75 program_name => 'test_proc_1'); --->当前步骤应执行的相应程序 76 77 DBMS_SCHEDULER.define_chain_step ( 78 chain_name => 'test_chain_1', 79 step_name => 'chain_step_2', 80 program_name => 'test_proc_2'); 81 82 DBMS_SCHEDULER.define_chain_step ( 83 chain_name => 'test_chain_1', 84 step_name => 'chain_step_3', 85 program_name => 'test_proc_3'); 86END; 87/ 88 894、定义chain规则 90--用于定义chain根据执行结果应该如何跳转的问题,每个CHAIN 规则都拥有condition和action 属性, 91--当满足condition 时则执行action中指定的step。使用DBMS_SCHEDULER.DEFINE_CHAIN_RULE 过程 92BEGIN 93 DBMS_SCHEDULER.define_chain_rule ( 94 chain_name => 'test_chain_1', 95 condition => 'TRUE', 96 action => 'START "CHAIN_STEP_1"', 97 rule_name => 'chain_rule_1', 98 comments => 'First link in the chain.'); 99 100 DBMS_SCHEDULER.define_chain_rule ( 101 chain_name => 'test_chain_1', 102 condition => '"CHAIN_STEP_1" COMPLETED', 103 action => 'START "CHAIN_STEP_2"', 104 rule_name => 'chain_rule_2', 105 comments => 'Second link in the chain.'); 106 107 DBMS_SCHEDULER.define_chain_rule ( 108 chain_name => 'test_chain_1', 109 condition => '"CHAIN_STEP_2" COMPLETED', 110 action => 'START "CHAIN_STEP_3"', 111 rule_name => 'chain_rule_3', 112 comments => 'Third link in the chain.'); 113 114 DBMS_SCHEDULER.define_chain_rule ( 115 chain_name => 'test_chain_1', 116 condition => '"CHAIN_STEP_3" COMPLETED', 117 action => 'END', 118 rule_name => 'chain_rule_4', 119 comments => 'End of the chain.'); 120END; 121/ 122 1235、激活chain 124BEGIN 125 DBMS_SCHEDULER.enable ('test_chain_1'); 126END; 127/ 128 1296、将chain添加到job 130BEGIN 131 DBMS_SCHEDULER.CREATE_JOB ( 132 job_name => 'test_chain_1_job', 133 job_type => 'CHAIN', 134 job_action => 'test_chain_1', 135 repeat_interval => 'freq=minutely; interval=2', 136 start_date => SYSTIMESTAMP, 137 end_date => SYSTIMESTAMP + (1/48), 138 enabled => FALSE); --->值为TRUE用于激活JOB 139END; 140/ 141 1427、手动执行chain 143BEGIN 144 DBMS_SCHEDULER.run_chain ( 145 chain_name => 'test_chain_1', 146 job_name => 'test_chain_1_run_job', 147 start_steps => 'chain_step_1,chain_step_3'); -->可以指定单步或多步以及所有步骤 148END; 149/ 150 151scott@CNMMBO> select * from tb_schduler; 152 153 ID DESCR CR_DATE 154---------- -------------------- ----------------- 155 1 test_proc_1 20131203 14:36:03 156 2 test_proc_3 20131203 14:36:04 157 158--激活job 159scott@CNMMBO> exec dbms_scheduler.enable('test_chain_1_job'); 160 161PL/SQL procedure successfully completed.

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java中比较两个时间的差值

项目背景1.某篇文稿的发布时间是publishDate,例如:2020072118:00:41。2.现要求判断该篇文稿的发布时间是否在近30天之内。publicstaticlongdayDiff(DatecurrentDate,DatepublishDate){LongcurrentTimecurrentDat