Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー SQL の使用法 » ストアドプロシージャー、トリガー、バッチ、ユーザー定義関数 » トリガー » トリガーに関する詳細情報

 

INSTEAD OF トリガー

INSTEAD OF トリガーは、トリガーが実行されるとトリガー元アクションはスキップされ、代わりに指定されたアクションが実行される点で BEFORE トリガーや AFTER トリガーと異なります。

INSTEAD OF トリガーに固有の機能や制限を次に示します。

  • INSTEAD OF トリガーは、特定のテーブルのトリガーイベントごとに 1 つだけ指定できます。

  • INSTEAD OF トリガーはテーブルまたはビューに定義できます。ただし、INSTEAD OF トリガーはマテリアライズドビューには定義できません。マテリアライズドビューには INSERT 文、DELETE 文、UPDATE 文などの DML 操作を実行できないからです。

  • INSTEAD OF トリガーを定義するときは、ORDER 句または WHEN 句は指定できません。

  • INSTEAD OF トリガーは、UPDATE OF column-list トリガーイベントには定義できません。

  • INSTEAD OF トリガーが再帰を実行するかどうかは、トリガーのターゲットがベーステーブルであるか、ビューであるかで異なります。ビューの場合は再帰が発生しますが、ベーステーブルの場合は発生しません。たとえば、INSTEAD OF トリガーによって、トリガーが定義されているベーステーブルに対して DML 操作が実行されても、これらの操作でトリガーは実行されません (BEFORE トリガーや AFTER トリガーを含む)。ターゲットがビューの場合は、ビューに対して実行された操作ですべてのトリガーが実行されます。

  • テーブルに INSTEAD OF トリガーが定義されている場合、ON EXISTING 句を含む INSERT 文をテーブルに対して実行できません。実行しようとすると、SQLE_INSTEAD_TRIGGER エラーが返されます。

  • WITH CHECK OPTION を指定して定義されているか、WITH CHECK OPTION を指定して定義されている別のビューにネストされており、INSTEAD OF INSERT トリガーが定義されているビューには、INSERT 文を実行できません。UPDATE 文と DELETE 文も同様です。実行しようとすると、SQLE_CHECK_TRIGGER_CONFLICT エラーが返されます。

  • 位置付け更新、位置付け削除、PUT 文、またはワイド挿入操作の結果として INSTEAD OF トリガーが実行されると、SQLE_INSTEAD_TRIGGER_POSITIONED エラーが返されます。

 INSTEAD OF トリガーを使用した更新不可のビューの更新
 参照