トリガーされるアクション文から呼び出されるストアド プロシージャには、1つ以上のSQL文を指定できます。有効な文を以下の表にまとめます。
トリガーのタイプ | 有効な文 |
---|---|
AFTER |
|
BEFORE |
|
トリガーされる文は、トリガーを起動する文と同じトランザクション内で実行する必要があります。ストアド プロシージャはトランザクションの状態を変更できますが、トリガー本体に含まれる文はトランザクションの状態を変更できません。
SQL CALL文を実行しても、トランザクションは開始しません。 トランザクションを開始するのは、ストアド プロシージャ内の最初のSQLリクエストまたは式の実行です。 その後、システムはそれにリクエスト番号、およびトランザクション番号がまだ割り当てられていない場合にはトランザクション番号を割り当てます。 その後、システムはストアド プロシージャ内の各SQLリクエストのリクエスト番号を増分します。 ただし、SQLリクエストのトランザクション番号は、セッション モードおよびCALLリクエストが実行されたトランザクションの状態に依存します。
そのため、以下の文はトリガーから呼び出されるストアド プロシージャの本体内では許可ない。
- すべてのDDL文
- すべてのDCL文
- BEGIN TRANSACTIONおよびEND TRANSACTION文
- すべての例外処理文
正確には、これは正しくありません。トリガーによって呼び出されるストアド プロシージャは条件ハンドラーを有効に含むことができますが、そのほとんどはプロシージャが呼び出されるときに決して実行されません。トリガー文での最初の失敗により、リクエスト全体がアボートしてロールバックするためです。
一般に、ストアド プロシージャは以下の3つのタイプのパラメータをサポートします。
- IN
- OUT
- INOUT
ただし、トリガーされたアクションでは出力をリクエスト元に返すことができないので、OUTおよびINOUTパラメータはトリガーから呼び出されるストアド プロシージャ内で許可ない。
old-values相関名およびnew-values相関名はパラメータとして渡せますが、old-values-table別名、new-values-table別名、またはold-new-table別名は渡せません。