トリガーが呼び出されるタイミング
OPEN/CLOSE前
OPEN/CLOSE前のトリガーは、テーブル(またはそのビュー)を開く/閉じる直前に呼び出されます。
OPEN前のトリガーは、テーブルまたはビューが開かれた時、そして、別のビューによってテーブルがまた開かれていない時に呼び出されます。
すなわち、ロジックが「ビュー1を開く」、「ビュー2を開く」の順に定義されている場合(ここでもビュー1とビュー2はどちらも同じテーブルがベース)、トリガーは、ビュー2を開くときではなく、ビュー1を開くときに呼び出されます。
CLOSE前のトリガーは、テーブルまたはビューが閉じられる時、そして別のビューがまだテーブルを開いていない時に呼び出されます。
すなわち、ロジックが「ビュー1を閉じる」、「ビュー2を閉じる」の順に定義されている場合(ビュー1およびビュー2はどちらも同じテーブルがベース)、トリガーは、ビュー1を閉じる時ではなく、ビュー2を閉じるときに呼び出されます。
OPEN/CLOSE後
「前」オプションと同様ですが、テーブルを閉じる試行に成功した直後に呼び出されます。
READ前
テーブルからのレコードの読み取りを試行する直前に呼び出されます。入力前のトリガーは、テーブルの「情報」にアクセスできないため(情報がまだ入力されていない)、このトリガーは慎重に使用してください。このモードでは、テーブルへのアクセスに使用されるキーにアクセスできないため、このような操作を前提としたトリガーを設計しないでください。
READ後
レコードがテーブルから正常に読み取られた後、レコードの詳細が呼び出し元ファンクションに渡される直前に呼び出されます。仮想列ロジックは、この段階までに完了しています。
INSERT前
テーブルへの新規レコードの挿入を試行する直前に呼び出されます。以下の点に注意してください。
- 要求元がCHECK_ONLY(*YES)を指定した場合でも、トリガーは実行されます。
- トリガーが実行されても、挿入に失敗することがあります(重複キー・エラーなど)。INSERT前のトリガーによってデータベースを変更しないでください。データベースを変更する場合は、トリガーを「INSERT後」の位置に移動してください。
- トリガーの呼び出し時には、すべての仮想ロジックが完了しています。
INSERT後
テーブルへの新規レコードの挿入直後に呼び出されます。以下の点に注意してください。
- 要求元がCHECK_ONLY(*YES)を指定した場合、トリガーは実行されません。
- 呼び出し時には、すべてのバッチ制御ロジックが実行されています。
- AUTOCOMMITが指定されている場合、トリガーの呼び出し前にコミットが実行されます。
UPDATE前
テーブル内の既存レコードの更新を試行する直前に呼び出されます。以下の点に注意してください。
- 要求元がCHECK_ONLY(*YES)を指定した場合でも、トリガーは実行されます。
- トリガーが実行されても、更新に失敗することがあります(重複キー・エラーなど)。UPDATE前のトリガーによってデータベースを変更しないでください。データベースを変更する場合は、トリガーを「UPDATE後」の位置に移動してください。
- トリガーの呼び出し時には、すべての仮想ロジックが完了しています。
UPDATE後
テーブル内の既存レコードの更新直後に呼び出されます。以下の点に注意してください。
- 要求元がCHECK_ONLY(*YES)を指定した場合、トリガーは実行されません。
- 呼び出し時には、すべてのバッチ制御ロジックが実行されています。
- AUTOCOMMITが指定されている場合、トリガーの呼び出し前にコミットが実行されます。
DELETE前
テーブル内の既存レコードの削除を試行する直前に呼び出されます。以下の点に注意してください。
- 要求元がCHECK_ONLY(*YES)を指定した場合でも、トリガーは実行されます。
- (非常に稀ですが)トリガーが実行されても、削除に失敗することがあります。DELETE前のトリガーによってデータベースを変更しないでください。データベースを変更する場合は、トリガーを「DELETE後」の位置に移動してください。
DELETE後
テーブル内の既存レコードの削除直後に呼び出されます。以下の点に注意してください。
- 要求元がCHECK_ONLY(*YES)を指定した場合、トリガーは実行されません。
- 呼び出し時には、すべてのバッチ制御ロジックが実行されています。
- AUTOCOMMITが指定されている場合、トリガーの呼び出し前にコミットが実行されます。