抛去理论,直奔主题,三步创建简单的Oracle定时任务:
1、新建测试表 job_test 及测试序列 seq_test
测试表job_test建表语句:create table job_test(id number,createTime date);
测试序列seq_test穿件语句:create sequence seq_test;
2、创建测试存储过程proc_test
create or replace procedure proc_test as
begin
insert into job_test(id,createTime) value);
commit;
end;
/
3、创建定时任务job_test
VARIABLE jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,'proc_test;',SYSDATE,'SYSDATE+1/(60*24)');--每隔1分钟执行一次
commit;
end;
/
至此,简单的定时任务创建完成。自定时任务创建开始,每间隔1分钟将执行一次存储过程(即向job_test表中插入测试数据),验证如下:
延伸
查看当前正在运行的定时任务:select job_id,next_date,next_sec from user_jobs;
终止正在执行的定时任务: exec dbm(job_id);
JOB定时任务中一些常见的执行时间整理如下:
1)每分钟
TRUNC(sysdate,'mi')+1/(24*60)
2)按天定时
每天凌晨0点执行
TRUNC(sysdate+1)
每天凌晨1点执行
TRUNC(sysdate+1)+1/24
每天早上8点30分执行
TRUNC(SYSDATE+1)+(8*60+30)/(24*60)
3)按周定时
每周一的凌晨02点
TRUNC(next_day(sysdate,1))+2/24
TRUNC(next_day(sysdate,'星期一'))+2/24
每周二的中午12点
TRUNC(next_day(sysdate,2))+12/24
TRUNC(next_day(sysdate,'星期二'))+12/24
4)按月定时
每月1号凌晨0点
TRUNC(LAST_DAY(SYSDATE)+1)
每月1号凌晨01点
TRUNC(LAST_DAY(SYSDATE)+1)+1/24
5)按季度定时
每个季度第一天的0点
TRUNC(ADD_MONTHS(SYSDATE,3),'q')
每个季度第一天的02点
TRUNC(ADD_MONTHS(SYSDATE,3),'q')+2/24
每个季度最后一天晚上11点
TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24
6)按半年定时
每年7月1号和1月1号凌晨01点
ADD_MONTHS(TRUNC(sysdate,'yyyy'),6)+1/24
7)按年定时
每年1月1号的02点执
ADD_MONTHS(TRUNC(sysdate,'yyyy'),12)+2/24