FOR EACH ROW トリガーを実行する際に、影響される一連の行内の行の列の値で、トリガーで現在実行されている値を参照する必要があります。データベース内の表 (主題表を含む) の列を参照するには、正規の SELECT ステートメントを使用できることに注意してください。 FOR EACH ROW トリガーは現在実行中の行の列を、 CREATE TRIGGER ステートメントの REFERENCING 文節で指定できる 2 つの変位変数を使って参照します。変位変数には、相関名とともに OLD および NEW として指定される 2 種類があります。この分類には次のような意味があります。
次の例を考えてください。
CREATE TRIGGER REORDER AFTER UPDATE OF ON_HAND, MAX_STOCKED ON PARTS REFERENCING NEW AS N_ROW FOR EACH ROW MODE DB2SQL WHEN (N_ROW.ON_HAND < 0.10 * N_ROW.MAX_STOCKED AND N_ROW.ORDER_PENDING = 'N') BEGIN ATOMIC VALUES(ISSUE_SHIP_REQUEST(N_ROW.MAX_STOCKED - N_ROW.ON_HAND, N_ROW.PARTNO)); UPDATE PARTS SET PARTS.ORDER_PENDING = 'Y' WHERE PARTS.PARTNO = N_ROW.PARTNO; END
上で説明した変位変数の OLD および NEW の定義により、すべての変位変数がすべてのトリガーに対して定義できるわけではないことが分かります。変位変数は、次のようなトリガー事象の種類に基づいて定義することができます。
注: | 変位変数は FOR EACH ROW トリガーに対してのみ指定できます。 FOR EACH STATEMENT トリガーでは変位変数を参照しても、影響される行のうち変位変数が参照中の行を指定することはできません。 |