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

トリガー事象

トリガーはどれもある事象と関連しています。トリガーは、それに対応する事象がデータベースで発生すると活動化されます。このトリガー事象は、特定の事象、すなわち UPDATE、INSERT、または DELETE (参照を制約するアクションにより生じる操作を含む) が対象表で実行される際に発生します。以下に例を示します。

    CREATE TRIGGER NEW_HIRE
      AFTER INSERT ON EMPLOYEE
      FOR EACH ROW MODE DB2SQL
      UPDATE COMPANY_STATS SET NBEMP = NBEMP + 1

上のステートメントは、挿入操作が表 employee で行われる際に活動化されるトリガー new_hire を定義します。

どのトリガー事象も (したがってどのトリガーも)、 1 つだけの対象表と 1 つだけの更新操作に関連付けることができます。以下のような更新操作があります。

挿入操作
挿入操作は INSERT ステートメントによってのみ行われます。したがって、LOAD コマンドなどの INSERT を使わないユーティリティーを用いてデータをロードすると、トリガーは活動化されません。

更新操作
更新操作は、UPDATE ステートメントか、 ON DELETE SET NULL の参照を制約する規則の結果として行われます。

削除操作
削除操作は、DELETE ステートメントか、 ON DELETE CASCADE の参照を制約する規則の結果として行われます。

トリガー事象が更新操作である場合、その事象は対象表の特定の列と関連させることができます。この場合のトリガーは、更新操作が特定の列のどれかを更新しようとする場合に限り活動化されます。これにより、トリガーを活動化する事象をさらに細分化することができます。たとえば、次のトリガー REORDER は、更新操作を表 PARTS の列 ON_HANDMAX_STOCKED で実行する場合に限り活動化します。

    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)
      BEGIN ATOMIC
      VALUES(ISSUE_SHIP_REQUEST(N_ROW.MAX_STOCKED -
                                    N_ROW.ON_HAND,
                                    N_ROW.PARTNO));
      END


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