トリガーの理解しにくい一面として、複数のトリガーが同じトリガー元アクションの影響を受ける場合に、これらのトリガーが実行される順序があります。競合するトリガーが実行されるかどうか、また実行される場合の順序は、トリガーのタイプ (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 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |