[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 メーリングリストの案内