[pgsql-jp: 34217] plpgsqlのバグ

CM illuminate33 @ hotmail.com
2004年 10月 30日 (土) 15:51:15 JST


バグが取れないんです。
お時間があればお願いします。
和暦/月/日(全てinteger数値)のテーブルtemporarytableからdateの本テーブル
ccallinoneuに移すストアドなんですが・・・・

環境はWindows XP professional Service Pack 1、cygwin-1.3.12-4、postgresql
7.2.1-2です。

$ vi 20041028sp.sql
CREATE OR  REPLACE FUNCTION insert_dt_from_n ()
 RETURNS opaque AS '

DECLARE
X6 date;
 --reception_date (change, PRIMARY KEY)
X8 integer;
 --customers (change)
X9 integer;
 --customerage (change)
X11 integer;
 --consulationroute (change)
X14 integer;
 --reception_status
Xresult integer;
 --result of query

BEGIN

SELECT INTO X8 customers FROM customers WHERE items=NEW.customers;

IF (X8 ISNULL) THEN
        X8:=0;
END IF;
SELECT INTO X9 customerage FROM customerage WHERE items=NEW.customerage;
IF (X9 ISNULL) THEN
        X9:=0;
END IF;
SELECT INTO X11 consultationroute FROM consultationroute WHERE
items=NEW.consultationroute;

IF (X11 ISNULL) THEN
        X11:=0;
END IF;

IF (NEW.receptionstatusA ISNULL) THEN
        IF (NEW.receptionstatusB ISNULL)
                THEN X14:=0;
        ELSE
                X14:=1;
 END IF;
ELSE
        X14:=2;
END IF;

SELECT count(*) INTO Xresult  FROM ccallinoneu
WHERE ccallinoneu.receipt_no=NEW.receipt_no
AND

ccallinoneu.reception_date=to_date(((NEW.reception_year+1988)*10000
+(NEW.reception_month)*100+NEW.reception_day),
'yyyymmdd');

IF Xresult=0
THEN
INSERT INTO ccallinoneu
 (receipt_no, technologicalmethod, department,
 receptionmethod, commission, reception_date,
circumstance, customers, customerage, productionplace,
consultationroute, measures, improvement, reception_status)
VALUES
(NEW.receipt_no, NEW.technologicalmethod, NEW.department,
NEW.receptionmethod, NEW.commission,

to_date(((NEW.reception_year+1988)*10000
+(NEW.reception_month)*100+NEW.reception_day), 'yyyymmdd'),

NEW.circumstance, X8, X9, NEW.productionplace, X11,
NEW.measures, NEW.improvement, X14);

RETURN NEW;
ELSE

UPDATE ccallinoneu SET
technologicalmethod=NEW.technologicalmethod,
department=NEW.department, receptionmethod=NEW.receptionmethod,
commission=NEW.commission, circumstance=NEW.circumstance,
customers=X8,
customerage=X9, productionplace=NEW.productionplace,
consultationroute=X11, measures=NEW.measures,
improvement=NEW.improvement,
reception_status=X14
WHERE receipt_no=NEW.receipt_no AND reception_date=
to_date(((NEW.reception_year+1988)*10000+(NEW.reception_month)*100+
NEW.reception_day), 'yyyymmdd');

RETURN NEW;

END IF;
END;'

LANGUAGE 'plpgsql';



CREATE TRIGGER tri_idfn AFTER INSERT OR UPDATE
ON temporarytable2 FOR EACH ROW
EXECUTE PROCEDURE insert_dt_from_n ();

文字変数宣言以外のところで値代入するのは、
SELECT INTO以外でできないんでしょうか?

もしかするとIF文のネストがいけないのか・・・・

どうしても最後のyyyymmddのあたりでコンパイルエラーしてしまいます。
javaのコンパイラの親切さに慣れすぎているのか、
postgresqlはそっけなさすぎて・・・・・

ベテランの皆さんはどうやってデバッグしているんでしょうか?
ストアド自体、今まで一度成功しただけで、実用化するのはやっぱり早すぎるのかな
?

松本



pgsql-jp メーリングリストの案内