トリガーの概要
トリガーは、ストアド・プロシージャのように、データベースに格納して繰り返し起動できる名前付きPL/SQLユニットです。ストアド・プロシージャとは異なり、トリガーは、有効にしたり無効にすることができますが、明示的に起動することはできません。
トリガーは、有効の場合、データベースによって自動的に起動されます(つまり、トリガーは、トリガーを起動するイベントが発生すると、常に起動されます)。トリガーは、無効の場合、起動されません。
トリガーは、CREATE
TRIGGER
文を使用して作成します。トリガーを起動する文およびトリガーの動作対象となる項目に関して、トリガーを起動するイベントを指定します。トリガーは、項目(表、ビュー、スキーマまたはデータベース)に対して作成または定義するといいます。また、タイミングも指定します(タイミングによって、トリガーを起動する文の実行前または実行後のどちらにトリガーを起動するかと、トリガーを起動する文の影響を受ける行ごとにトリガーを起動するかどうかを決定します)。デフォルトでは、トリガーは有効な状態で作成されます。
トリガーが表またはビューに対して作成される場合、トリガーを起動するイベントはDML文で構成され、そのトリガーはDMLトリガーと呼ばれます。
crosseditionトリガーは、エディション・ベースの再定義でのみ使用されるDMLトリガーです。
トリガーがスキーマまたはデータベースに対して作成される場合、トリガーを起動するイベントは、DDLまたはデータベース操作文で構成され、そのトリガーはシステム・トリガーと呼ばれます。
条件付きトリガーは、トリガーを起動する文に影響を受ける行ごとにデータベースで評価されるSQL条件を指定するWHEN
句を含む、DMLトリガーまたはシステム・トリガーです。
トリガーで参照される表は、トリガーの起動時に、他のユーザーのトランザクションで使用されたSQL文によって変更中である可能性があります。トリガー内で実行されるSQL文は、スタンドアロンのSQL文が従う規則と同じ規則に従います。具体的には次のとおりです。
-
トリガーの問合せでは、参照される表の読取り一貫性のある現在のマテリアライズド・ビューおよび同一トランザクション内で変更されたデータが確認されます。
-
トリガーの更新では、既存のデータ・ロックが解放されるまで待機してから、処理が続行されます。
INSTEAD
OF
トリガーは、次のいずれかです。
-
非エディショニング・ビューに対して、または非エディショニング・ビューのネストした表の列に対して作成されるDMLトリガー
-
CREATE
文で定義されたシステム・トリガー
データベースでは、トリガーを起動する文が実行されるかわりに、INSTEAD
OF
トリガーが起動されます。
ノート:
トリガーは、通常、トリガーを起動する文の名前(DELETE
トリガーまたはLOGON
トリガーなど)、トリガーの定義対象である項目の名前(DATABASE
トリガーまたはSCHEMA
トリガーなど)またはタイミング(BEFORE
文トリガーまたはAFTER
行単位トリガーなど)を使用して呼ばれます。
関連項目:
-
crosseditionトリガーの詳細は、『Oracle Database開発ガイド』を参照してください
-
WHEN
句の詳細は、「CREATE TRIGGER文」を参照してください