トリガーのつくり方

トリガーとは、INSERT や UPDATE, DELETE(イベントと呼ぶ)の際に連動して行なう一連の処理を自動化してくれる便利な機能。
トリガーをつくるときには、そのトリガーが呼び出される条件を定義する。

CREATE TRIGGER トリガー名
        AFTER insert ON テーブル名 FOR EACH ROW
        EXECUTE PROCEDURE 関数名();

この場合は、「テーブル名」に対して insert が発生した時に、対象となる行に対応して「関数名」を実行するという意味である。
注意する点としては、呼び出す関数には引数をつけることが出来ないということ。

これに対応する関数の例。

CREATE OR REPLACE FUNCTION 関数名() RETURNS trigger AS $$
        BEGIN
        IF NEW.parentSeq IS NOT NULL THEN
         UPDATE BbsMaster SET countChild = countChild+1,
                              updateTime = CURRENT_TIMESTAMP
                          WHERE bbsSeq = NEW.parentSeq;
        END IF;
          RETURN NEW;
        END;
        $$ LANGUAGE 'plpgsql';

NEWとは、insertされる「行」をそのまま表しています。「NEW.parentSeq」は、この行の値 parentSeq を参照しています。
この場合、インサートした行のparentSeqがnullでなければ、BbsMasterテーブルの countChildをカウントアップしてupdateTimeに現在時刻を更新する。その際、「parentSeq=挿入行の値」というwhere句を条件として与えること。という意味を表しています。

関数を定義するときの注意として、

  • トリガー用の関数は引数を受け取れない
  • 戻り値として、trigger型を宣言する
  • 戻り値は、NEWとかOLDを使えば、それでオケ

というのを忘れないでください。

トリガーを使えば、updateの際に更新時刻をトリガーで自動的に与えることが出来て便利ですよ。