エンタープライズレベルのアプリケーションでは、必要な機能を実現するためにユーザーが手動で操作を実行することに依存することはできません。したがって、スケジュールされたタスクは不可欠であり、特にバックグラウンド処理とデータの読み込みを実行する場合に役立ちます。 Oracle データベースは、開発者と管理者の作業を簡素化するストアド プロシージャとスケジュールされたタスクを提供します。この記事では、Oracle のスケジュールされたタスクを使用してストアド プロシージャを定期的に実行する方法に焦点を当てます。
Oracle スケジュール済みタスク
Oracle データベース内のスケジュール済みタスクは、DBMS_SCHEDULER パッケージを使用して作成できます。このパッケージを使用すると、複雑なスケジュール要件を持つジョブを作成できます。時間ごと、日ごと、週ごと、月ごと、年ごとなど、さまざまな頻度をサポートできます。スケジュールされたタスクは、特定の日時に実行したり、異なるタイムゾーンで実行したりすることもできます。 DBMS_SCHEDULER パッケージを使用して、次のタイプのオブジェクトを作成できます。
この記事では、DBMS_SCHEDULER を使用してジョブを作成し、それを実行するストアド プロシージャにバインドする方法に焦点を当てます。
ストアド プロシージャを作成する
まず、完了したいタスク操作を実行するストアド プロシージャを作成する必要があります。以下は、現在の時刻をテーブルに挿入するストアド プロシージャの簡単な例です。
CREATE OR REPLACE PROCEDURE INSERT_TIME AS BEGIN INSERT INTO TIME_LOG (LOG_TIME) VALUES (SYSDATE); COMMIT; END INSERT_TIME;
ジョブの作成
ストアド プロシージャを使用して、次にジョブを作成してその実行をスケジュールする必要があります。これから作成するジョブでは、毎朝 6 時に現在時刻が挿入されます。 DBMS_SCHEDULER.CREATE_JOB 関数を使用してこのジョブを作成する例を次に示します。
BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'INSERT_TIME_JOB', job_type => 'STORED_PROCEDURE', job_action => 'INSERT_TIME', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=DAILY; BYHOUR=6;', enabled => TRUE, comments => 'Insert current time every day at 6 AM'); END;
CREATE_JOB 関数を使用してジョブを作成する場合は、次のパラメーターの説明に従う必要があります。
ジョブをストアド プロシージャにバインドする
上記の例では、ジョブを作成し、その実行用のストアド プロシージャを指定しました。ここで、指定された時刻に操作が実行されるように、このジョブをストアド プロシージャにバインドする必要があります。 DBMS_SCHEDULER.SET_ATTRIBUTE 関数を使用して、このタスクを実行できます。
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE ( name => 'INSERT_TIME_JOB', attribute => 'program_action', value => 'INSERT_TIME;'); END;
この例では、SET_ATTRIBUTE 関数を使用して、ジョブ「INSERT_TIME_JOB」の「program_action」属性を「INSERT_TIME」に設定します。これにより、特定の時間に INSERT_TIME ストアド プロシージャを呼び出すように DBMS_SCHEDULER に指示されます。
DBMS_SCHEDULER パッケージを使用して、スケジュールされたジョブを作成し、ストアド プロシージャでタスクをバインドする方法を学習しました。これで、スケジュールされたタスクが実行されるのを待って、TIME_LOG テーブル内のレコードを表示できます。
結論
Oracle データベースのスケジュールされたタスク機能を使用すると、バックグラウンド処理タスクを簡単に実行できます。 DBMS_SCHEDULER パッケージには、繰り返し実行、並列実行、障害回復など、特定のアプリケーションのニーズを満たすための多くのオプションが用意されています。さらに、さまざまなタイムゾーン、日付、週、月などにまたがってジョブを実行できるため、スケジュールされたタスクが非常に柔軟になります。この記事では、Oracle のスケジュールされたタスクを使用してストアド プロシージャを定期的に実行する方法に焦点を当てます。この記事が有益なガイダンスを提供し、Oracle データベースに基づいたスケジュールされたタスクの使用と操作の原則をより深く理解するのに役立つことを願っています。
以上がOracle でストアド プロシージャを定期的に実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。