HOME >> Tips >> Oracle

DBMS_JOB パッケージでPLSQLを定期的に実行する方法

 
文書番号:20238



Windows で言うタスクスケジューラのようなものがOracle にもあります。
DBMS_JOB パッケージを使用することでストアドプロシージャを定期的に実行することができます。

【実行手順】

    実行するストアドプロシージャを作成し、コンパイルしておきます。

    ジョブを登録します。
    
    DECLARE
        JOB_NO NUMBER;
    BEGIN
        --書式:DBMS_JOB.SUBMIT(JOB_NO,'実行するプロシージャ名',次回実行日時,実行間隔);
    
        --「TEST_PROCESS」を「2014/10/01 13:00:00」に実行を開始し、1日間隔で実行する
        DBMS_JOB.SUBMIT(JOB_NO,'TEST_PROCESS();',TO_DATE('2014/10/01 13:00:00','YYYY/MM/DD HH24:MI:SS'),SYSDATE + 1);
    
        --「TEST_PROCESS」を「2014/10/01 13:00:00」に実行を開始し、1時間間隔で実行する
        DBMS_JOB.SUBMIT(JOB_NO,'TEST_PROCESS();',TO_DATE('2014/10/01 13:00:00','YYYY/MM/DD HH24:MI:SS'),SYSDATE + 1/24);
    
        --「TEST_PROCESS」を「2014/10/01 13:00:00」に実行を開始し、30分間隔で実行する
        DBMS_JOB.SUBMIT(JOB_NO,'TEST_PROCESS();',TO_DATE('2014/10/01 13:00:00','YYYY/MM/DD HH24:MI:SS'),SYSDATE + 30/1440);
    
    
        --「TEST_PROCESS」を即座に実行を開始し、1分間隔で実行する
        --開始時刻を指定せずに設定する場合
        DBMS_JOB.SUBMIT(JOB_NO,'TEST_PROCESS();',INTERVAL=>'SYSDATE+1/1440');
    
        COMMIT;
    END;
    

    登録済みのジョブの一覧を取得します。
    
    SELECT *
    FROM   user_jobs;
    

    ジョブを手動で実行します。
    ※ジョブ番号は上記のジョブ一覧を照会するSQLで確認できます。
    
    BEGIN
        DBMS_JOB.RUN(ジョブ番号);
    
        COMMIT;
    END;
    

    ジョブを削除します。
    ※ジョブ番号は上記のジョブ一覧を照会するSQLで確認できます。
    
    BEGIN
        DBMS_JOB.REMOVE(ジョブ番号);
    
        COMMIT;
    END;