begin
  sys.dbms_job.submit(job => :job,
                      what => 'checkout;',
                      next_date => to_date('09-09-2009 03:00:30', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'sysdate+1');
  commit;
end;我用PL/SQL写了个JOB,想它每天晚上3点运行名称为“checkout”的存储过程,但它没有按预期的运行。高手说说问题在哪里,该怎样改?

解决方案 »

  1.   

    楼主试试:
     next_date => trunc(sysdate)+3/24,参考:
    begin
      sys.dbms_job.submit(job => :job,
                          what => test_sql;',
                          next_date => trunc(sysdate)+23/24,
                          interval => 'trunc(next_day(sysdate,''星期五''))+23/24');
      commit;
    end;      其中:job是系统自动产生编号,test_sql是一个过程,next_date设置下次执行时间,这里是今天晚上23:00,interval设置时间间隔,多久执行一次,这里是每周的星期五晚上23:00,函数next_day返回日期中包含指定字符的日期,trunc 函数去掉日期里的时间,也就是得到的是某天的00:00,时间是以天为单位的所以要得到某某点某某分,就需要分数:1/24      一小时;
    1/1440    一分;
    1/3600    一秒;  
      

  2.   

    看看这个贴,以前收藏的有关job的问题http://topic.csdn.net/u/20090206/12/81640e78-880a-483b-a3c1-9f65e841898f.html
      

  3.   

    --不是不运行,而是时间还没有到2009.9.9 
    next_date => to_date('09-09-2009 03:00:30', 'dd-mm-yyyy hh24:mi:ss'), 
      

  4.   

    oem中就可以自动执行job啊,干嘛用自己写呢?
      

  5.   

    我也遇到过job不运行的情况,首先查看job是不是broken了,再看看job队列参数,还有一种情况,手动就是job的进程死在那里,要重新启动实例
      

  6.   

    var job number;
    begin 
      sys.dbms_job.submit(job => :job, 
                          what => 'checkout;', 
                          next_date => sysdate, 
                          interval => 'trunc(sysdate+1)+1*3/24'); 
      commit; 
    end; 
      

  7.   

    创建的job,自己首先执行一下,否则它是不会执行的