トリガーは、常にその起動元の文と同じトランザクション内で実行されます。トリガーの効果がコミットされるかロールバックされるかは、トランザクションの結果およびトリガーコードブロック内の例外処理方法によって決まります。
例外がロールバック動作に与える影響
例外が発生しない場合
トリガーコードブロックが例外を発生させずに完了した場合、トリガーの DML 効果は囲むトランザクションに従います:
トランザクションがコミットされた場合、トリガーの DML 効果もコミットされます。
トランザクションがロールバックされた場合、トリガーの DML 効果もロールバックされます。
例外がキャッチされ、処理された場合
トリガーコードブロック内で例外が発生し、例外セクションによってキャッチされた場合:
トリガー内の DML コマンドは、例外が処理されたとしても引き続きロールバックされます。
起動元の文自体は、アプリケーションが囲むトランザクションのロールバックを明示的に強制しない限り、ロールバックされません。
例外が処理されない場合
トリガーコードブロック内で発生した例外が処理されない場合、囲むトランザクションは中止され、ロールバックされます。このとき、トリガーの DML コマンドおよび起動元の文の両方がロールバックされます。