トリガーについて
トリガーは、データベース内に格納されているPL/SQLユニットで、有効な状態である場合、指定したイベントに対応して自動で実行(起動)されます。
トリガーには次の構造があります。
TRIGGER trigger_name
triggering_event
[ trigger_restriction ]
BEGIN
triggered_action;
END;
trigger_nameは、スキーマ内のトリガーに関して一意であることが必要です。トリガーは、スキーマ内の別の種類のオブジェクト(表など)と同じ名前にすることができますが、混乱を防ぐため、ネーミング規則を使用することをお薦めします。
トリガーが有効状態の場合、trigger_restrictionがTRUEまたは省略されると、triggering_eventによりデータベースはtriggered_actionを実行します。triggering_eventは、表、ビュー、スキーマまたはデータベースのいずれかに関連付けられており、次のうちのいずれかとなります。
-
DML文(「データ操作言語(DML)文について」を参照)
-
DDL文("「データ定義言語(DDL)文について」を参照)
-
データベース操作(SERVERERROR、LOGON、LOGOFF、STARTUPまたはSHUTDOWN)
トリガーが無効状態である場合、trigger_restrictionがTRUEまたは省略されている場合でも、triggering_eventにより、データベースがtriggered_actionを実行することはありません。
デフォルトでは、トリガーは有効な状態で作成されます。有効なトリガーを無効化したり無効なトリガーを有効化したりできます。
サブプログラムとは異なり、トリガーは直接的に起動できません。トリガーは、任意のユーザーまたはアプリケーションにより発生する可能性があるトリガー・イベントによってのみ起動します。正常に処理されないエラーを発生させないかぎり、トリガーが実行されていることに気づかない可能性があります。
単純トリガーは、次のタイミング・ポイントの1つで起動する可能性があります。
-
トリガー・イベントが実行される前(文レベルのBEFOREトリガー)
-
トリガー・イベントが実行された後(文レベルのAFTERトリガー)
-
各行がイベントの影響を受ける前(行レベルのBEFOREトリガー)
-
各行がイベントの影響を受けた後(行レベルのAFTERトリガー)
複合トリガーは、複数のタイミングポイントで起動する可能性があります。複合トリガーの詳細は、Oracle Database PL/SQL言語リファレンスに関する項を参照してください。
INSTEAD OFトリガーはビューで定義され、そのトリガー・イベントはDML文です。DML文を実行するかわりに、Oracle DatabaseはINSTEAD OFトリガーを実行します。詳細は、「INSTEAD OFトリガーの作成」を参照してください。
システム・トリガーは、スキーマまたはデータベースで定義されます。スキーマで定義されたトリガーは、スキーマの所有者(現行ユーザー)に関連付けられた各イベントで起動します。データベースで定義されたトリガーは、すべてのユーザーに関連付けられた各イベントで起動します。
トリガーの1つの使用目的は、すべてのクライアント・アプリケーションに適用されるビジネス・ルールを実行することです。たとえば、EMPLOYEES表に追加するデータが特定のフォーマットをもっていなければならず、多くのクライアント・アプリケーションがこの表にデータを追加できるとします。表のトリガーを使用すると、追加するすべてのデータが適切な形式になります。任意のクライアントが表にデータを追加するたびにトリガーが実行されるため、クライアントはルールを回避することができず、ルールを実行するコードは、すべてのクライアント・アプリケーションではなくトリガーにのみ格納されて保持されます。トリガーの他の使用目的の詳細は、Oracle Database PL/SQL言語リファレンスに関する項を参照してください。
関連項目:トリガーの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。