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 エラーが返されます。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |