我在SQLPlus Worksheet里这样创建JOB:
VARIABLE JOBNO NUMBER;
BEGIN
DBMS_JOB.SUBMIT(
job => :JOBNO,
what => 'MBOX.CALCULATECB_BILL;',
next_date => trunc(sysdate+1),
interval => 'trunc(sysdate+1)+1/24',
    no_parse => FALSE
);
COMMIT;
END;就是从明天凌晨开始做这个任务,每小时做一次,从user_jobs里查看信息,第一次时间也是对的,上次运行时间是21-4月 -06 00:00:00,下次是21-4月 -06 01:00:00,但运行一次以后下次运行时间就变成了21-4月 -06 02:00:04,就是往后延长了几秒,时间长了就延长好多了,这个过程执行的时间开销是6分钟左右,延长的时候和过程的开销有关系吗?虽然我定时可以用Next_Date()来重新设置执行时间,但总是不很方便,想请教下,有没什么方法可以使我的任务执行时间每次都是准点执行,还是我的写法有问题?

解决方案 »

  1.   

    你的写法用了trunc(sysdate+1),应该没有问题,是不是存储过程在执行的时候出现异常,致使job后延,或者是执行时间>1小时,呵呵,建议在过程中加上异常捕捉看一下,关注
      

  2.   

    在网上看到一篇文,不错,发你看一下,希望有帮助:
    http://www.dvbbs.net/tech/data/2006041339060.asp
      

  3.   

    谢谢楼上的回答,我的数据处理不会大于1个小时的,而且我过程里有捕捉异常错误:
         .
         .
         .
        EXCEPTION
             WHEN OTHERS THEN
               DBMS_OUTPUT.PUT_LINE(SQLERRM);
               ROLLBACK;
               CLOSE data_cur;
      END;
    事实上我也看了几次过程的执行,最终都完成了我预期要做的工作,就是这个时间的延时有点不明白
      

  4.   

    'trunc(sysdate+1)+1/24 + x/1440 试试看,我们就这么写
      

  5.   

    时间间隔这样写:trunc(sysdate+1)+1/24 + x/1440,根本就不对啊,ORACLE根本不知道X是什么,难道大家都没发现过这问题吗
      

  6.   

    interval => 'to_date(to_char(trunc(sysdate)+1/24,''yyyymmdd hh24''),''yyyymmdd hh24'''
      

  7.   

    interval => 'to_date(to_char(trunc(sysdate)+1/24,''yyyymmdd hh24''),''yyyymmdd hh24'')'
      

  8.   

    interval => 'to_date(to_char(trunc(sysdate,hh)+1/24,''yyyymmdd hh24''),''yyyymmdd hh24'')'