ORACLE--JOB简单应用

前一阵使用JOB定时执行存储过程,整理内容如下:
[quote]创建语句:
DECLARE
FORMULA NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT(job => FORMULA,
what => 'PRPDFORMULA_CCIC;',
next_date => SYSDATE,
interval => 'TRUNC(sysdate)+23/24',
no_parse => TRUE);
COMMIT;
END; [/quote]
[b]参数的含义:[/b]
00、job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。
01、what参数是将被执行的PL/SQL代码块。
02、next_date参数指何时将运行这个工作。
03、interval参数何时这个工作将被重执行。
04、no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE指示此PL/SQL代码在它第一次执行时应进行语法分析,而FALSE指示本PL/SQL代码应立即进行语法分析。

[b]查询语句:[/b]select * from dba_jobs;

[b]定时参数:[/b]
[quote]每天午夜12点 'TRUNC(SYSDATE + 1)'
每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'
1:每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60)

Interval => sysdate+1/1440
2:每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate) + 1 +1/ (24)
3:每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
4:每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
5:每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
6:每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
7:每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24[/quote]

[b]遇到的问题:[/b]
job在调用存储过程如果失败次数达到16次就会不再执行了,查询dba_jobs表中broken字段的值为Y:
[b]解决方案:[/b]
1、修改存储过程中导致JOB执行失败的地方:
执行:
exec dbms_job.broken(22,false,sysdate+1/2440);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值