每天工作安排几个小时

时间:2013-01-15 11:50:11

标签: oracle plsql oracle11g scheduling jobs

我需要安排从0600到1800的工作。工作应该每两个小时运行一次。例如0800,1000,1200,1400,1600,1800。

以下是我迄今为止设法完成的代码:

DECLARE
     l_id binary_integer;
     begin
       sys.dbms_job.submit(job => l_id, what => 'integration_export;', interval => 'TRUNC(SYSDATE,''hh24'')+0/24/60');
       sys.dbms_output.put_line(l_id);    
end; 

当然,这将在每2小时后运行一次,而不会在1801 - 0759停止。我该如何添加此限制? 我要做的一件事就是创建另一个计划程序,该计划在1801年醒来并在NEXT_DATE更改此作业。但是,我想知道这是不是一个好主意。

有什么建议吗?

提前致谢: - )

2 个答案:

答案 0 :(得分:7)

dbms_job已经过时了。我建议你改用dbms_scheduler(在Oracle 10g中引入)。

dbms_scheduler.create_job(job_name        => 'YOUR_JOB',
                          job_type        => 'PLSQL_BLOCK', 
                          job_action      => 'integration_export;',
                          start_date      => systimestamp,
                          repeat_interval => 'freq=hourly; byhour=8,10,12,14,16,18; byminute=0; bysecond=0;',
                      enabled         => true,
                      auto_drop       => false,
                      comments        => 'some comment about the job');

答案 1 :(得分:2)

使用高级dbms_scheduler而不是dmbs_job。这是一个例子:

begin
  DBMS_SCHEDULER.create_job (
    job_name        => 'Integration_export',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'integration_export;',
    start_date      => SYSTIMESTAMP,
    enabled         => TRUE,
    repeat_interval => 'freq=daily; byhour=6,8,10,12,14,16,18; byminute=0; bysecond=0');
end;
/