アプリケーション開発の手引き

変位変数

FOR EACH ROW トリガーを実行する際に、影響される一連の行内の行の列の値で、トリガーで現在実行されている値を参照する必要があります。データベース内の表 (主題表を含む) の列を参照するには、正規の SELECT ステートメントを使用できることに注意してください。 FOR EACH ROW トリガーは現在実行中の行の列を、 CREATE TRIGGER ステートメントの REFERENCING 文節で指定できる 2 つの変位変数を使って参照します。変位変数には、相関名とともに OLD および NEW として指定される 2 種類があります。この分類には次のような意味があります。

OLD 相関名
行の元の状態 (つまりトリガー・アクションがデータベースに適用される前の状態) を収集する相関名を指定します。

NEW 相関名
トリガー・アクションがデータベースに適用される際に、データベースの行を更新するために使用される (または使用された) 値を収集する相関名を指定します。

次の例を考えてください。

    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 の定義により、すべての変位変数がすべてのトリガーに対して定義できるわけではないことが分かります。変位変数は、次のようなトリガー事象の種類に基づいて定義することができます。

UPDATE
UPDATE トリガーは、OLD と NEW の両方の変位変数を参照できます。

INSERT
INSERT トリガーは、NEW 変位変数のみを参照できます。これは INSERT 操作の活動化の前に、影響される行がデータベースに存在しないためです。すなわち、トリガー・アクションがデータベースに適用される前の古い値を定義する行の元の状態がありません。

DELETE
DELETE トリガーは OLD 変位変数のみを参照できます。これは、削除操作で指定された新しい値がないためです。
注:変位変数は FOR EACH ROW トリガーに対してのみ指定できます。 FOR EACH STATEMENT トリガーでは変位変数を参照しても、影響される行のうち変位変数が参照中の行を指定することはできません。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]