日期:2014-05-17  浏览次数:20904 次

Oracle的job错误
一个oracle的job:
declare
  job_tbl number;
begin
  sys.dbms_job.submit(job => job_tbl,
  what => 'clear_tbl;',
  next_date => trunc(SYSDATE)+30/1440,
  interval => 'trunc(sysdate)+30/1440');
  commit;
end;
/

这里要求每天00:30执行clear_tbl这个存储过程,现在clear_tbl存储过程执行没问题,且单独手工运行这个job也没问题,但一旦让它自己定时运行就报错,我猜测,是否是interval => 'trunc(sysdate)+30/1440')这里的时间采用与next_date一致,所以当在trunc(SYSDATE)+30/1440执行了该job后,由于间隔时间也是当前时间,所以报错,改为:
declare
  job_tbl number;
begin
  sys.dbms_job.submit(job => job_tbl,
  what => 'clear_tbl;',
  next_date => trunc(SYSDATE)+30/1440,
  interval => 'trunc(sysdate+1)+30/1440');
  commit;
end;
/
即可,是这么理解么?谢谢!

------解决方案--------------------
下一个时间应该是 xxxx年xx月xx天 00:30
间隔时间应该是一天
------解决方案--------------------
BEGIN
sys.dbms_scheduler.create_job(
job_name => '"YANFA"."JOB_UPDATE_RUNSTATE"',
job_type => 'STORED_PROCEDURE',
--调用的命令类型,此处调用存储过程
job_action => 'YANFA.PRO_UPDATE_RUNSTATE',
--每10分钟运行一次
repeat_interval => 'FREQ=MINUTELY;INTERVAL=10',
--每10秒钟运行一次
--repeat_interval => 'FREQ=SECONDLY;INTERVAL=10',
start_date => systimestamp at time zone '+8:00',
job_class => 'DEFAULT_JOB_CLASS',
auto_drop => FALSE,
enabled => FALSE
);
sys.dbms_scheduler.set_attribute( name => '"YANFA"."JOB_UPDATE_RUNSTATE"', attribute => 'restartable', value => TRUE); 
sys.dbms_scheduler.enable( '"YANFA"."JOB_UPDATE_RUNSTATE"' ); 
END;