我创建了一个oracle作业,触发我的存储过程每天凌晨5点运行。但我想限制工作只在周一到周五凌晨5点运行。这是我写的工作:
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT (
job => X ,
what => 'BEGIN usp_procedurename(''ENV''); END;' ,
next_date => to_date('10/01/2014 05:00:00','dd/mm/yyyy hh24:mi:ss') ,
interval => 'SYSDATE + 1' ,
no_parse => FALSE );
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
我是否可以通过某种方式更改限制作业仅在周一至周五凌晨5点运行的时间间隔,还是有其他方式?
对此有任何帮助表示赞赏。 感谢
答案 0 :(得分:3)
不要使用dbms_job - 它早已被弃用并被dbms_scheduler取代。
使用dbms_scheduler,这应该做你想要的:
begin
dbms_scheduler.create_job(
job_name => 'MY_JOB'
,job_type => 'PLSQL_BLOCK'
,job_action => 'BEGIN usp_procedurename(''ENV''); END;'
,start_date => to_timestamp_tz('2014-01-09 12:00:00 Europe/Berlin',
'yyyy-mm-dd hh24:mi:ss tzr')
,repeat_interval => 'FREQ=DAILY;BYHOUR=05;BYDAY=Mon,Tue,Wed,Thu,Fri'
,enabled => TRUE
,comments => 'my job (runs Monday to Friday at 05:00)');
end;
注意:您应始终使用带时区的时间戳作为开始日期;否则,当您的国家/地区从夏令时切换到夏令时时,您的工作将在不同的时间运行。