トリガーについて

トリガーは、データベース内に格納されているPL/SQLユニットで、有効な状態である場合、指定したイベントに対応して自動で実行(起動)されます。

トリガーには次の構造があります。

TRIGGER trigger_name
  triggering_event
  [ trigger_restriction ]
BEGIN
  triggered_action;
END;

trigger_nameは、スキーマ内のトリガーに関して一意であることが必要です。トリガーは、スキーマ内の別の種類のオブジェクト(表など)と同じ名前にすることができますが、混乱を防ぐため、ネーミング規則を使用することをお薦めします。

トリガーが有効状態の場合、trigger_restrictionがTRUEまたは省略されると、triggering_eventによりデータベースはtriggered_actionを実行します。triggering_eventは、表、ビュー、スキーマまたはデータベースのいずれかに関連付けられており、次のうちのいずれかとなります。

トリガーが無効状態である場合、trigger_restrictionがTRUEまたは省略されている場合でも、triggering_eventにより、データベースがtriggered_actionを実行することはありません。

デフォルトでは、トリガーは有効な状態で作成されます。有効なトリガーを無効化したり無効なトリガーを有効化したりできます。

サブプログラムとは異なり、トリガーは直接的に起動できません。トリガーは、任意のユーザーまたはアプリケーションにより発生する可能性があるトリガー・イベントによってのみ起動します。正常に処理されないエラーを発生させないかぎり、トリガーが実行されていることに気づかない可能性があります。

単純トリガーは、次のタイミング・ポイントの1つで起動する可能性があります。

複合トリガーは、複数のタイミングポイントで起動する可能性があります。複合トリガーの詳細は、Oracle Database PL/SQL言語リファレンスに関する項を参照してください。

INSTEAD OFトリガーはビューで定義され、そのトリガー・イベントはDML文です。DML文を実行するかわりに、Oracle DatabaseはINSTEAD OFトリガーを実行します。詳細は、「INSTEAD OFトリガーの作成」を参照してください。

システム・トリガーは、スキーマまたはデータベースで定義されます。スキーマで定義されたトリガーは、スキーマの所有者(現行ユーザー)に関連付けられた各イベントで起動します。データベースで定義されたトリガーは、すべてのユーザーに関連付けられた各イベントで起動します。

トリガーの1つの使用目的は、すべてのクライアント・アプリケーションに適用されるビジネス・ルールを実行することです。たとえば、EMPLOYEES表に追加するデータが特定のフォーマットをもっていなければならず、多くのクライアント・アプリケーションがこの表にデータを追加できるとします。表のトリガーを使用すると、追加するすべてのデータが適切な形式になります。任意のクライアントが表にデータを追加するたびにトリガーが実行されるため、クライアントはルールを回避することができず、ルールを実行するコードは、すべてのクライアント・アプリケーションではなくトリガーにのみ格納されて保持されます。トリガーの他の使用目的の詳細は、Oracle Database PL/SQL言語リファレンスに関する項を参照してください。

関連項目:トリガーの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。