2016-09-15 11 views
1

2日間に1回実行するタスクを作成しようとしています(キャッシュ・データを削除する)。これはOracle 11gで実行されます。これまでのところ私は、以下の匿名ブロックを思い付いた:DBMS_SCHEDULER repeat_intervalを使用して、2日に1回タスクを実行します。

begin 
DBMS_SCHEDULER.CREATE_JOB (
    job_name    => 'clear_cache', 
    job_type    => 'PLSQL_BLOCK', 
    job_action   => 'begin delete from MY_CACHE;commit; end;', 
    start_date   => to_date('19/09/2016','dd/mm/rrrr')+ 19/24, 
    repeat_interval  => 'to_date(''19/09/2016'',''dd/mm/rrrr'')+ 2 + 19/24', 
    enabled    => TRUE); 
    end; 

しかし、私はrepeat_intervalの値がわからないです。..

を私は今日、このブロックを実行すると仮定すると(15/09/2016)、私はclear_cacheになりたいです上で実行:

19/09/2016 at 7 p.m 
21/09/2016 at 7 p.m. 
23/09/2016 at 7 p.m. 
etc 

私は私が

start_date   => sysdate, 
repeat_interval  => 'trunc(sysdate) + 7 + 7/24' 
を使用している場合ことを知っています0

そして、それは私が欲しいもの、7 p.m.でおき7日繰り返されます、しかし、次の月曜日から始まり、すべての第二日繰り返すことですし、私はそれを達成する方法がわからない、実行todayを開始します...

ので、 repeat_intervalに入れたいものを知りたいのですが...

ありがとうございました。

答えて

3

自分でロールするのではなく、built-in calendaring syntaxを使用する価値があります。ジョブを間隔2で毎日実行するように指定すると、2日ごとに実行されます。

構文はFREQ=DAILY;INTERVAL=2です。開始日を午後7時に設定すると、現在のタイムゾーンでその時刻に開始されます。

パラメータstart_dateは日付なので、ここで実際の日付またはタイムスタンプを使用できます。

DBMS_SCHEDULER.CREATE_JOB (
    job_name    => 'clear_cache', 
    job_type    => 'PLSQL_BLOCK', 
    job_action   => 'begin delete from MY_CACHE; commit; end;', 
    start_date   => timestamp '2016-09-19 19:00:00', 
    repeat_interval  => 'FREQ=DAILY;INTERVAL=2', 
    enabled    => TRUE); 
関連する問題