2

0600 から 1800 までのジョブをスケジュールする必要があります。ジョブは 2 時間ごとに実行する必要があります。たとえば、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; 

もちろん、これにより、1801 - 0759 で停止することなく、2 時間ごとにジョブが実行されます。この制限を追加するにはどうすればよいですか? 私が考えていることの 1 つは、1801 にウェイクアップし、このジョブの NEXT_DATE を変更する別のスケジュール プロシージャを作成することです。しかし、それが良い考えかどうかは疑問です。

助言がありますか?

前もって感謝します :-)

4

2 に答える 2

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');
于 2013-01-15T12:13:25.513 に答える
2

dmbs_jobの代わりに、高度なdbms_schedulerを使用してください。次に例を示します。

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;
/
于 2013-01-15T12:12:58.023 に答える