2_04_37-トリガーの設定

PHPとPostgreSQLを利用したWEBシステムの開発例を掲載していきます。腕時計 販売サイト my-watch.biz



● 2_04_37-トリガーの設定

 トリガーはテーブルに対して insert、delete、update のいずれかの処理が行われた時に連動して何らかの処理を行うものです。

 トリガーの構文は以下になります。
CREATE TRIGGER トリガー名 

{ BEFORE | AFTER }

{ イベント [OR ...] }

ON テーブル名

FOR EACH ROW

EXECUTE PROCEDURE 関数名(引数)

{ BEFORE | AFTER }
トリガー処理が実施されるタイミングを指定します。

{ イベント [OR ...] }
トリガー処理が実施されるイベントを指定します。INSERT、DELETE、UPDATEのいずれかを指定します。

ON テーブル名
トリガー処理を仕掛けるテーブル名を指定します。

FOR EACH ROW
行毎にトリガー処理が実施されることを意味します。

EXECUTE PROCEDURE 関数名(引数)
トリガー処理を行う関数名を指定します。ここで指定される関数は、引数の無い、戻り値の型がOPAQUE型の関数でなくてはなりません。

トリガーの削除構文は以下です。
DROP TRIGGER トリガー名 ON テーブル名

チェックデジット値を自動で入力します。
データ入力用のテーブルを作成します。

create table check_t(

se serial, -- 連番取得

c2 varchar unique, -- チェックデジット値カラム

c3 varchar, -- 入力値

primary key ( se )
);


チェックデジット値作成関数

create function getNewCd(int4)

returns varchar as '

declare

arg alias for $1;

st varchar := '''';

len int4;

val int4;

sumval int4 :=0;

rtn varchar;

begin

if ((arg between 0 and 9999999) = false) then

RAISE EXCEPTION ''length error'';

end if;

select ltrim(to_char(arg, ''0000000'')) into st;

for i in 1..7 loop

select (substr(st, i, 1)::int4) into val;

sumval := sumval + (val * (8 - i));

end loop;

select st||ltrim(to_char((11 - (sumval % 11)), ''0'' )) into

rtn;

return rtn;

end;

' language 'PLpgSQL';


トリガーが呼び出す関数、この関数は上のチェックデジット値作成関数を呼び出しています。

create function setNewCdForTrg()

returns opaque as '

declare

begin

select getNewCd(NEW.se)into NEW.c2;

return NEW;

end;

' language 'PLpgSQL';


トリガーを作成

create trigger setNewCdTocheck_t

before insert

on check_t

for each row

execute procedure setNewCdForTrg();


下記のデータを順に入力して下さい。

insert into check_t (c3) values ('masahiko');

insert into check_t (c3) values ('satou');

insert into check_t (c3) values ('wada');

insert into check_t (c3) values ('tanaka');

insert into check_t (c3) values ('suzuki');


 下記の値が入力されました。赤枠がチェックデジットで生成された文字列です。


 一度全てのデータを削除してもう一度やり直して見てください。
 赤枠のチェックデジットは違う値をとります。

 このように本来はプログラム(制御側)がロジックで取得していた情報をデータベース側で生成することができます。
 ただしソース・コードの管理が必要ですので仕様全体の構成を考えて採用して下さい。

 正規マニュアルの説明は以下になります。
 第 34章トリガ


戻る

Copyright (c) 2007 MSweb All Rights Reserved

腕時計 クロノグラフ(時計)のメンズ専門販売サイトカシオ G-SHOCK、Baby-G(腕時計)専門の通信販売サイトG-SHOCK、Baby-G専門通販サイト 運営ブログ

腕時計 女性専用 販売のladies-watch.biz腕時計 メンズ(男性)専門販売のmens-watch.biz