[pgsql-jp: 28157] Re: PL/pgSQLで行を返すサンプル(7.3にて)
Mashiki
mashiki @ yanah.com
2002年 12月 3日 (火) 05:08:11 JST
Mashikiです。
羽生さん石井さんリプライありがとうございます。
>試してみました。Hogeというテーブルを作成して、それに対する
>条件をつけただけの簡単なものですが、期待通りの動作をしてくれました。
私も早速試してみました。行を返す関数のサポートはあまり注目されて
いませんが本当にすごいです。長くなりそうなので、別のメールで。
>一回ずつreturn nextしないと駄目なのかな〜と思ってループの中に
>放り込んでますが、そんなのいらないよんということであれば、ご指摘
>ください。> ALL
ほんとに同じ感想です。Selectの結果を1行ごとでなく、まとめて返す方法
はないのでしょうか。
特に再帰呼び出しで、下の階層で得られた結果をそのまま返したいところ
なのですが、
create or replace function tree0(int4, int4) returns setof record as '
declare
rec record;
begin
for rec in
select id, $2
from treetest
where pid = $1
loop
return next rec;
return next tree0(rec.id, $2+1); /* この行に注目! */
end loop;
return;
end;
' language 'plpgsql';
くらいのコーディングで書きたいところを、あまり意味のない変数定義と
selectとloopを書かなければならず、少々悔しい思いです。
create or replace function tree0(int4, int4) returns setof record as '
declare
rec1 record;
rec2 record;
begin
for rec1 in
select id, $2
from treetest
where pid = $1
loop
return next rec1;
for rec2 in
select *
from tree0(rec1.id, $2+1) as t(id int4, level int4)
loop
return next rec2;
end loop;
end loop;
return;
end;
' language 'plpgsql';
pgsql-jp メーリングリストの案内