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 の使用法 » ストアドプロシージャー、トリガー、バッチ、ユーザー定義関数 » トリガー

 

トリガーに関する詳細情報

トリガーの理解しにくい一面として、複数のトリガーが同じトリガー元アクションの影響を受ける場合に、これらのトリガーが実行される順序があります。競合するトリガーが実行されるかどうか、また実行される場合の順序は、トリガーのタイプ (BEFORE、INSTEAD OF、または AFTER) とトリガーのスコープ (ローレベルまたは文レベル) の 2 点で決まります。

UPDATE 文は、複数のテーブルのカラム値を変更できます。トリガー起動の順序は各テーブルで同じですが、テーブルが更新される順序は保証されません。

ローレベルのトリガーの場合、BEFORE トリガーが実行されてから INSTEAD OF トリガーが実行され、その後に AFTER トリガーが実行されます。特定のローのローレベルのトリガーがすべて実行されてから、後続のローのトリガーが実行されます。

文レベルのトリガーの場合、INSTEAD OF トリガーが実行されてから AFTER トリガーが実行されます。文レベルの BEFORE トリガーはサポートされていません。

文レベルとローレベルの AFTER トリガーが競合する場合は、ローレベルの AFTER トリガーがすべて完了してから文レベルのトリガーが実行されます。

文レベルとローレベルの INSTEAD OF トリガーが競合する場合、ローレベルのトリガーは実行されません。

AFTER STATEMENT トリガーに対して作成される OLD および NEW テンポラリテーブルは、基本となるベーステーブルと同じスキーマを持ち、カラム名とデータ型は同じです。ただし、これらのテーブルにはプライマリキー、外部キー、またはインデックスはありません。OLD および NEW テンポラリテーブル内のローの順序は保証されず、ベーステーブルのローが元々更新された順序と一致しない可能性があります。


INSTEAD OF トリガー