SET句は、値を列、変数、またはパラメータに割り当てます。
トリガー アクションが、アクションが完了した後でターゲット テーブルの行を保存する場合、トリガー定義の中でトリガーされるSQL文としてSET句を使用できます。たとえば、SET句はUPDATEおよびINSERT BEFORE行トリガーで使用できますが、DELETE文はターゲット テーブルから行セットを除去するため、DELETE BEFORE行トリガーではSET句を使用できません。
SET句の使用時には、次のルールが適用されます。
- SETは、NEW ROWと呼ばれる新規の遷移テーブル行の値を変更できますが、OLD ROWは変更できません。
- SETはNEW ROWとOLD ROWの両方の値を使用できます。
- 各SET句では、1つの列にのみ値を割り当てることができます。
- SET式のスカラー式には、以下の要素を任意に組み合わせて指定できます。
- システム値
- スカラーの副次式となる引数のある関数
- スカラーの(集約ではない)ユーザー定義関数
- NEWまたはOLD行の列を参照する式
- 定数
- SET句に含まれる列名が明示的に修飾されていない場合、システムはその列をNEW行の相関名を使用して修飾します。
- SET割当て句が適用される列にCHECK列または参照整合性制約がある場合、その制約が適用されるのはBEFORE行トリガーのすべてのSET句が適用された後の、列の最後の値だけです。
- 同一の列を更新する複数のSET句を指定できます。
- 複数のSET句で同じ列を複数回更新するとき、列に割り当てられる最後の値はシーケンス内で最後のSET句に割り当てられている値であり、それより前の更新は失われます。
- UDT式をUDT列に割り当てることができます。ただし、ミュテーターSET句の構文はサポートされていません。
その対処法としては、標準の非ミュテーターSET句構文を使用し、等号の片側に列参照を、反対側にミュテーターを含むUDT式を指定します。