トリガーの概要

トリガーは、ストアド・プロシージャのように、データベースに格納して繰り返し起動できる名前付き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行単位トリガーなど)を使用して呼ばれます。

関連項目: