2014-01-09 68 views
0

我創建了一個oracle作業,這些作業觸發了我的存儲過程,每天早上5點運行。但是我想限制作業只能在星期一到星期五的凌晨5點運行。這裏是我寫的工作:安排Oracle作業

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點運行至週五或有任何其他方式的間隔?

對此的任何幫助表示讚賞。 謝謝

回答

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; 

:你應該總是使用與時區的開始日期時間戳;否則,當您的國家/地區從夏令時切換到夏令時時,您的工作將在不同的時間運行。