[pgsql-jp: 30632] PL/pgSQLで"(09:00)AAA"から"AAA"のみを抜き出すには?
aiko_0303 @ infoseek.jp
aiko_0303 @ infoseek.jp
2003年 7月 29日 (火) 19:08:50 JST
お世話になっております。kishikawaです。
現在、PL/pgSQL を使用してトリガを作成しています。
・TBL1のINSERT or UPDATEがあったときに呼び出される。
・TBL1の'氏名(name)'列データ更新時に、TBL2の'備考(ref)'列に「(HH:MM)氏名データ(改行コード)」
の形式で書き込まれる。
この方法で、
TBL1の氏名更新時に、TBL2の'備考(ref)'列に同じ氏名データがある場合は書き込まない
(※時間は違っても良い)という処理を入れたいのですが、PL/pgSQLでのやり方が分かりません。
全データから(HH:MM)を取り除いたデータと新しく書き込まれる氏名データが一致すれば、
書き込み処理を行わないということなのですが。
正規表現等を使用すれば良いのでしょうか?
どなたか教えてください。よろしくお願いします。
以下がソースです。
********************************************
CREATE FUNCTION tbl_trigger01() RETURNS OPAQUE
AS '
DECLARE
sRefNew TBL2.ref%TYPE; -- TBL2に追加書き込みするデータ格納用
sRefOld TBL2.ref%TYPE; -- TBL2に追加書き込みするデータ格納用
sNowTime TIMESTAMP; -- UPDATE or INSERTするTBL2の主キー用
sNowHHII TEXT; -- 現在時間HH:M
sNowDATE TEXT; -- 現在時間HH:M
BEGIN
-- 氏名が''だったら何もしない
IF NEW.name ISNULL OR NEW.name = '''' THEN
RETURN NEW;
END IF ;
-- 現在時刻を取得
sNowTime := ''now'' ;
sNowDATE := to_char(sNowTime, ''YYYY-MM-DD 00:00:00'');
sNowHHII := to_char(sNowTime, ''HH24:MI'');
-- TBL2に該当データがあるか?
SELECT ref INTO sRefOld FROM TBL2 WHERE key = NEW.key
AND date_key = sNowDATE ;
-- TBL2に記入する内容を作成する ※(HH:MM)氏名データ
sRefNew :=''('' || sNowHHII || '')''|| NEW.name ;
IF NOT FOUND THEN
-- TBL2にデータをINSERTする。
INSERT INTO TBL2 (
key,
date_key,
ref ) VALUES (
NEW.key ,
sNowDATE::TIMESTAMP,
sRefNew
);
ELSE
-- TBL2に記入する内容を作成する
-- 前データは入っているか?
IF sRefOld ISNULL OR sRefOld = '''' THEN
-- (HH:MM)氏名データ のみをUPDATE
ELSE
-- 前データ + (改行コード)+ (HH:MM)氏名データ をUPDATE
sRefNew := sRefOld || ''\n'' || sRefNew ;
--@@@@@@@@@@@@
--前データが(09:10)山田太郎
--新規データが(10:00)山田太郎の場合は追記書き込みしない!!
--
-- ここの比較方法で詰まっています…
--@@@@@@@@@@@@
END IF ;
-- TBL2にデータをUPDATEする。
UPDATE TBL2 SET ref= sRefNew WHERE
key = NEW.key AND date_key = sNowDATE::TIMESTAMP ;
END IF ;
RETURN NEW ;
END ;
' LANGUAGE 'plpgsql' ;
********************************************
******************
aiko.K
******************
------------------------------------------------------------------------
花火より 恋するあなたへ アドバイス by infoseek
http://ap.infoseek.co.jp/uranai3.html
pgsql-jp メーリングリストの案内