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