こんにちは、指定された日付 (sysdate - 30) からデータを削除しようとするストアド プロシージャがあり、月の初めに Oracle ストアド プロシージャを実行しようとしています..
どうやってやるの ?
前もってありがとう、私の英語でごめんなさい
こんにちは、指定された日付 (sysdate - 30) からデータを削除しようとするストアド プロシージャがあり、月の初めに Oracle ストアド プロシージャを実行しようとしています..
どうやってやるの ?
前もってありがとう、私の英語でごめんなさい
おそらく機能する可能性のある最も簡単なことは、DBMS_JOB
パッケージを使用することです。これは、たとえば、your_procedure
翌月の最初の真夜中から始まる毎月最初の真夜中に実行され、次のパラメーターを渡します。sysdate - 30
DECLARE
l_jobno PLS_INTEGER;
BEGIN
dbms_job.submit( l_jobno,
'BEGIN your_procedure( sysdate - 30 ); END;',
add_months( trunc(sysdate,'MM'), 1 ),
q'{add_months( trunc(sysdate, 'MM'), 1 )}' );
commit;
END;
DBMS_SCHEDULER
より新しいバージョンの Oracle を使用していると仮定すると、より新しく洗練されたスケジューラであるパッケージを使用することもできます。それは、よりもはるかに洗練され、はるかに複雑になる可能性がDBMS_JOB
あります-ただし、要件が本当に単純な場合は、軽量のDBMS_JOB
方が学習と理解が容易になる場合があります.
マイナーノート:
DBMS_JOB から Oracle Scheduler に切り替えることをお勧めします。
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'your_job_name',
job_type => 'STORED_PROCEDURE', -- see oracle documentation on types --
job_action => 'name of the procedure',
start_date => trunc(sysdate)+2/24, -- every night @ 2 a.m.
repeat_interval => 'FREQ=DAILY;BYHOUR=2', -- daily @ 2 a.m.
end_date => NULL,
enabled => TRUE,
comments => 'your general comment');
END;
/
そのためのジョブをスケジュールできます..ジョブでストアドプロシージャを呼び出す必要があります.毎月の初めにストアドプロシージャを実行できるように..