トリガの理解しにくい一面として、複数のトリガが同じトリガ元アクションの影響を受ける場合に、これらのトリガが実行される順序があります。競合するトリガが実行されるかどうか、また実行される場合の順序は、トリガのタイプ (BEFORE、INSTEAD OF、または AFTER) とトリガのスコープ (ローレベルまたは文レベル) の 2 点で決まります。
UPDATE 文は、複数のテーブルのカラム値を変更できます。トリガ起動の順序は各テーブルで同じですが、テーブルが更新される順序は保証されません。
ローレベルのトリガの場合、BEFORE トリガが実行されてから INSTEAD OF トリガが実行され、その後に AFTER トリガが実行されます。特定のローのローレベルのトリガがすべて実行されてから、後続のローのトリガが実行されます。
文レベルのトリガの場合、INSTEAD OF トリガが実行されてから AFTER トリガが実行されます。文レベルの BEFORE トリガはサポートされていません。
文レベルとローレベルの AFTER トリガが競合する場合は、ローレベルの AFTER トリガがすべて完了してから文レベルのトリガが実行されます。
文レベルとローレベルの INSTEAD OF トリガが競合する場合、ローレベルのトリガは実行されません。
AFTER STATEMENT トリガに対して作成される OLD および NEW テンポラリテーブルは、基本となるベーステーブルと同じスキーマを持ち、カラム名とデータ型は同じです。ただし、これらのテーブルにはプライマリキー、外部キー、またはインデックスはありません。OLD および NEW テンポラリテーブル内のローの順序は保証されず、ベーステーブルのローが元々更新された順序と一致しない可能性があります。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |