[pgsql-jp: 31301] PL_pgSQL関数の正しい利用方法について
aoyagi
d-aoyagi @ sea.plala.or.jp
2003年 10月 25日 (土) 00:29:10 JST
初めて投稿させていただきます。青柳と申します。
PL/pgSQL言語で複合型・複数行を返す関数が使用できる
旨の投稿をMLのアーカイブ発見し、早速利用しようとしましたが
psqlから呼び出すとエラーが発生致しました。
エラーメッセージから推測すると
複数行を受け取れない文から複数行を返す関数を呼び出したと
いう事のようですが初心者の為自力で解決に至りませんでした。
初歩的な事で申し訳ありませんが
正しい利用方法につきまして御教授ください。
宜しく御願い致します。
※動作確認に利用したテーブルとデータは以下の通りです
CREATE TABLE test
(
id int4 NOT NULL,
name text,
age int4,
CONSTRAINT test_pkey PRIMARY KEY (id)
) WITHOUT OIDS;
INSERT INTO test (id, name, age) VALUES (1, 'satoh', 20);
INSERT INTO test (id, name, age) VALUES (2, 'tanaka', 24);
INSERT INTO test (id, name, age) VALUES (3, 'yamada', 28);
INSERT INTO test (id, name, age) VALUES (4, 'ikeda', 30);
CREATE OR REPLACE FUNCTION testfunc(INTEGER) RETURNS SETOF RECORD AS '
DECLARE
ageval ALIAS FOR $1;
rec RECORD;
BEGIN
FOR rec IN SELECT * FROM test WHERE age > ageval LOOP
RETURN NEXT rec;
END LOOP;
RETURN;
END;
'
language 'plpgsql';
[以下関数の呼び出しとエラーメッセージ]
select testfunc(26);
WARNING: Error occurred while executing PL/pgSQL function testfunc
WARNING: line 6 at return next
ERROR: Set-valued function called in context that cannot accept a set
#なお参考に致しましたのは石井様、羽生様の以下の投稿です。
#
#[pgsql-jp: 28115] Re: PostgreSQL7.3について疑問
#[pgsql-jp: 28123] PL/pgSQLで行を返すサンプル(7.3にて)
#
#また、本家の以下のサイトも参照しました
#http://techdocs.postgresql.org/guides/SetReturningFunctions
#
#利用環境は
#OS Redhat Linux 8.0
#PostgreSQL Version 7.3.4
#です。
青柳大介
pgsql-jp メーリングリストの案内