Oracle 定时器写法

--定义一个规则
--如果是定时轮询的job 下面 submit函数里面的 第三个参数不填写
declare
         job number;
begin
    dbms_job.submit(job, 'EXE_DATA_CHECKER;', '','TRUNC(sysdate) + 1 

+2 / (24)');
    commit;
end;

DECLARE
	V_JOB NUMBER;
BEGIN
	DBMS_JOB.SUBMIT(V_JOB, 'tb_datavalidator_wholeinfo;', SYSDATE, 'TRUNC(SYSDATE) + (12*60+37)/(24*60)');
	COMMIT;
END;

-- 查询定时任务
select job,next_date,what from dba_jobs 

--删除定时任务
begin
 dbms_job.remove(70);
 commit;
end;

部分规则为

每天午夜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

)''

PS 若想要查询下一个执行的时间为
select trunc(sysdate)+(8*60+45)/(24*60) from dual;

猜你喜欢

转载自peter2009.iteye.com/blog/1943415