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 © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |