ホームページ  >  記事  >  データベース  >  Oracle のスケジュールされたストアド プロシージャ

Oracle のスケジュールされたストアド プロシージャ

WBOY
WBOYオリジナル
2023-05-07 22:33:383011ブラウズ

Oracle は非常に人気のあるリレーショナル データベースです。ビジネスでは、自動化された操作を完了して運用コストを節約するために、ストアド プロシージャを定期的に実行する必要があることがよくあります。この記事では、Oracle を使用してストアド プロシージャを定期的に実行する方法を紹介します。

1. Oracle のストアド プロシージャのスケジュールされた実行の基本概念
Oracle のストアド プロシージャのスケジュールされた実行とは、システムが事前に作成されたストアド プロシージャを一定の時間間隔内で自動的に実行することを意味します。この方法は、通常のデータのアーカイブ、バックアップ、クリーンアップ、その他のタスクによく使用されます。

2. Oracle のストアド プロシージャのスケジュールされた実行を実装する方法
Oracle のストアド プロシージャのスケジュールされた実行は、Oracle のスケジューラを通じて実現できます。スケジューラを使用すると、指定した時点または間隔でジョブを開始し、時間が経過したらジョブを終了することが簡単にできます。

  1. ジョブの作成
    Oracle では、PL/SQL、PL/SQL Developer、Toad およびその他のツールを使用してジョブを作成できます。
    たとえば、ストアド プロシージャ「mystoredprocedure」の実行を含む、「myjob」というジョブを作成します。

begin
dbms_scheduler.create_job
(job_name=>'myjob' ,
job_type=>'STORED_PROCEDURE',
job_action=>'mystoredprocedure');
end;

  1. スケジュールされた実行
    ジョブの作成後、他に何をするかこの仕事を実行する時間はありますか? Oracle スケジューラは、次の 2 つの方法でジョブの実行時間を制御できます。

(1) 時間ベースの実行
Oracle では、dbms_scheduler パッケージを使用してスケジュールを作成できます。

##BEGIN

DBMS_SCHEDULER.CREATE_SCHEDULE (

      schedule_name          => 'weekends',  
      start_date             => SYSTIMESTAMP,  
      repeat_interval        => 'FREQ=WEEKLY;BYDAY=SAT,SUN;BYHOUR=0;BYMINUTE=0',  
      end_date               => NULL,  
      comments               => 'Weekend schedule - Saturday and Sunday every week at midnight.'  
);

END;

このコード スニペットは、毎日 0 時に実行されるスケジュールを作成できます。毎週末に。もちろん、特定のビジネス ニーズに基づいてさまざまなスケジュールを作成できます。

myjob を次の時間に実行するには、週末のスケジュール ロジックを myjob に適用する必要があります:

BEGIN

DBMS_SCHEDULER.SET_ATTRIBUTE

(  
  name                      => 'myjob',  
  attribute                 => 'repeat_interval',  
  value                     => 'weekends'  
);  
END ;

この時間ベースのスケジューリング方法を使用すると、ジョブの実行サイクルは非常に固定され、ビジネス ニーズに応じて開発者によって設定されます。

(2) イベント ベースの実行

ストアド プロシージャのスケジュールされた実行を実装するもう 1 つの方法は、イベント ドリブンです。たとえば、データ テーブル内のフィールドが変更された場合、ストアド プロシージャを駆動する必要があります。 .実行。 Oracle では、次のコードを使用してイベントベースのスケジュールされたスケジュールを作成できます:

BEGIN

DBMS_SCHEDULER.CREATE_JOB

(  
  job_name             => 'job_name',  
  job_type             => 'PLSQL_BLOCK',  
  job_action           => 'BEGIN my_procedure(:my_param); END;',  
  start_date           => SYSTIMESTAMP,  
  event_condition      => 'tab.col3 = ''Y''',  --这里可以选择需要监控的事件类型和字段  
  queue_spec           => 'queue_specification',  
  auto_drop            => FALSE,  
  enabled              => TRUE  
);  
END;

    ストレージの実行プロセス
  1. 上記の例では、「myjob」ジョブの役割は、ストアド プロシージャ「mystoredprocedure」を実行することです。ここで、スケジューラ自体はストアド プロシージャを実行せず、ジョブの実行の管理のみを行うことがわかります。
ストアド プロシージャを正常にスケジュールするには、ストアド プロシージャを作成し、ジョブに関連付ける必要があります。ここでは、例として「mystoredprocedure」という名前のストアド プロシージャを作成します。

CREATE OR REPLACE PROCEDURE "mystoredprocedure"

IS
BEGIN

INSERT INTO employees_audit  
  (employee_id,  
   salary,  
   entry_date)  
SELECT employee_id,  
       salary,  
       SYSDATE  
  FROM employees
  WHERE hire_date > SYSDATE - 1;  
       
END mystoredprocedure;

この例では、新しいデータ情報をデータベースのemployees_auditテーブルに保存するだけです。開発者は、特定のニーズに応じて独自のストアド プロシージャを作成できます。

ストアド プロシージャを定期的に実行するプログラムはバックグラウンドで実行されます。開発者が設定した時間スケジュール ポリシーに従って、ジョブは指定された時間に開始され、mystoredprocedure ストアド プロシージャが実行されます。

3. 概要

Oracle のストアド プロシージャのスケジュールされた実行は、定期的なタスクを処理するための効率的なソリューションです。このプロセスは、Oracle のスケジューラを使用して簡単に実装できます。この記事で紹介した実装方法により、開発者は実行時間、頻度、実行する必要があるストアド プロシージャを柔軟に設定できます。これにより、業務処理時間が大幅に短縮され、処理効率が向上します。

以上がOracle のスケジュールされたストアド プロシージャの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。