[pgsql-jp: 29058] fetchの連続使用時not found処理
Kuniko YASUDA
kyasuda @ d-d.co.jp
2003年 2月 14日 (金) 16:10:05 JST
はじめまして、安田と申します。
現在postgres 7.2で PL/SQL -> PL/pgSQLの変換作業を行って
いるのですが、fetchを連続で行った場合にエラーがでて困っております
PL/SQLで
-------------------------------------------
宣言部分
CURSOR c1 IS SELECT col1,col2,col3 FROM t1;
cc1 c1%ROWTYPE;
cc2 c1%ROWTYPE;
BEGIN部分
OPEN c1 ;
LOOP
cc1:= NULL;
cc2:= NULL;
FETCH c1 INTO cc1;
EXIT WHEN m1%NOTFOUND;
FETCH c1 INTO cc2;
INSERT INTO t2(
col11,col12,col13,
col21,col22,col23
) values (
cc1.col1,cc1,col2,cc1.col3,
cc2.col1,cc2,col2,cc2.col3
)
END LOOP;
CLOSE c1;
------------------------------------------
となっているところを
PL/pgSQLで
-------------------------------------------
宣言部分
CURSOR c1
c1 refcursor;
cc1 record;
cc2 record;
BEGIN部分
OPEN c1 FOR SELECT col1,col2,col3 FROM t1;
LOOP
FETCH c1 INTO cc1;
IF NOT found THEN
EXIT;
END IF;
FETCH c1 INTO cc2;
INSERT INTO t2(
col11,col12,col13,
col21,col22,col23
) values (
cc1.col1,cc1,col2,cc1.col3,
cc2.col1,cc2,col2,cc2.col3
)
END LOOP;
CLOSE c1;
------------------------------------------
この場合に、SELECT col1,col2,col3 FROM t1が
2件以上なかった場合に、cc2の部分で
ERROR: record cc2 is unassigned yetとなってしまいます。
PL/SQLでは "cc2:= NULL;" のような記述ができるのですが、
PL/pgSQLではrecord型にたいしてcc2:= NULL;のような
記述ができません。
PL/pgSQLでも同じような処理をすることはできないでしょうか。
よろしくお願いいたします。
pgsql-jp メーリングリストの案内