本来应该一分钟一次的job,为何实际跑出来变成一分钟零一秒或者零二秒了?
创建测试表
SQL> create table TEST(a date);
表已创建。
创建一个自定义过程
SQL> create or replace procedure MYPROC as
2 begin
3 insert into TEST values(sysdate);
4 end;
5 /
过程已创建。
创建JOB
SQL> variable job1 number;
SQL>
SQL> begin
2 dbms_job.submit(:job1, 'MYPROC; ',sysdate, 'sysdate+1/1440 '); --每天1440分钟,即一分钟运行test过程一次
3 end;
4 /
跑出来的结果是这样的:
2007-05-21 17:47:55
2007-05-21 17:48:56
2007-05-21 17:49:58
2007-05-21 17:50:59
------解决方案--------------------设置JOB执行时间,一般都用trunc(),你改了试试。
------解决方案--------------------trunc(sysdate, 'mi ') + 1/1440
------解决方案--------------------应该就是因为除法四舍五入的问题
------解决方案--------------------job 设置的是整点跑,但是也要看当时的调度,一般未必就是整点执行了,可能会晚那么几秒钟吧。而next_time 的时间就是在上一次job 开始的时间上加上interval 的,这样的话,伴随着job 执行次数的越来越多,下次执行时间和整点的差异会越来越大,因此,一般会采用trunc 的方式来使下次执行时间在期望的整点执行。