sql >> データベース >  >> RDS >> Oracle

Oracleクエリを定期的に実行するための最良の方法

    • ジョブ(およびクエリ)を実行するためのDBMS_SCHEDULERは、選択するツールです。したがって、テーブルのステータスを更新する場合 クエリの結果に基づいて、DBMS_SCHEDULERを使用します。

    たとえば、次の更新を行うジョブをスケジュールできます。

    update x
       set status = (CASE 
                       WHEN sysdate < x.DUE_DATE - y.WARN THEN
                         'Ok'
                       WHEN sysdate >= x.DUE_DATE - y.WARN and today < x.DUE_DATE - y.CRITICAL THEN
                         'Warn'
                       WHEN sysdate >= x.DUE_DATE - y.CRITICAL and sysdate <= x.DUE_DATE THEN
                         'Critical'
                       WHEN sysdate > x.DUE_DATE THEN
                         'Overdue'
                     END)
    ;
    

    毎日00:00にスケジュールされたジョブを作成するには:

    BEGIN
        dbms_scheduler.create_job(job_name => 'Status Updater',
                                  job_type => 'PLSQL_BLOCK',
                                  job_action => '
                                                 BEGIN 
                                                  update x
                                                    set status = (CASE 
                                                                    WHEN sysdate < x.DUE_DATE - y.WARN THEN
                                                                      ''Ok''
                                                                    WHEN sysdate >= x.DUE_DATE - y.WARN and today < x.DUE_DATE - y.CRITICAL THEN
                                                                      ''Warn''
                                                                    WHEN sysdate >= x.DUE_DATE - y.CRITICAL and sysdate <= x.DUE_DATE THEN
                                                                      ''Critical''
                                                                    WHEN sysdate > x.DUE_DATE THEN
                                                                      ''Overdue''
                                                                  END)
                                                     ;
                                                  END;',
                                  start_date => systimestamp,
                                  repeat_interval => 'FREQ=DAILY;INTERVAL=1;BYHOUR=0;BYMINUTE=0;',
                                  enabled => TRUE);
    END;
    /
    
    • レポートを作成する必要がある場合 、レポートツールでレポートをスケジュールするか、マテリアライズドビューを使用して結果セットを保存します。


    1. 2つの日付列から日付範囲を生成する

    2. Oracleは、select句で定義されたデータチャンクのチェックサム値を取得します

    3. SELECTステートメントでのNOLOCKヒントの効果

    4. SQLServerからの出力パラメータを使用してOracleストアドプロシージャを呼び出す