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


トリガーの細分性

トリガーは、活動化されると次のような細分性に従って実行されます。

FOR EACH ROW
影響される行の数と同じ回数だけ実行されます。

FOR EACH STATEMENT
トリガー事象に対して一度だけ実行されます。

影響される行が空の場合 (すなわち、 WHERE 文節が行を限定しなかった探索済み UPDATE または DELETE の場合)、 FOR EACH ROW トリガーは実行されません。ただし、FOR EACH STATEMENT トリガーはやはり一度実行されます。

たとえば、FOR EACH ROW を使って従業員数の計算を保持することができます。

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

FOR EACH STATEMENT の細分性を使って更新を行っても同じ結果が得られます。

    CREATE TRIGGER NEW_HIRED
      AFTER INSERT ON EMPLOYEE
      REFERENCING NEW_TABLE AS NEWEMPS
      FOR EACH STATEMENT MODE DB2SQL
      UPDATE COMPANY_STATS
      SET NBEMP = NBEMP + (SELECT COUNT(*) FROM NEWEMPS)
注:FOR EACH STATEMENT の細分性は、 BEFORE トリガーにはサポートされません (トリガー活動化時間で説明)。


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