[pgsql-jp: 28123] PL/pgSQLで行を返すサンプル(7.3にて)
羽生 章洋
habu @ air-beat.com
2002年 11月 29日 (金) 13:27:54 JST
羽生です。
> 客先から今帰ってきたばかりなので、明日早速試してみます。
試してみました。Hogeというテーブルを作成して、それに対する
条件をつけただけの簡単なものですが、期待通りの動作をしてくれました。
# この例だとSQL関数でええやん、という突っ込みが入りそうですが
あくまでも練習ということで(^^;;
create or replace function getHoge(integer,integer)
returns setof QueTest as
'
declare
min_id alias for $1;
max_id alias for $2;
ret Hoge%rowtype;
begin
for ret in
select * from Hoge
where id between min_id and max_id
loop
return next ret;
end loop;
return;
end;
'
language 'plpgsql';
一回ずつreturn nextしないと駄目なのかな〜と思ってループの中に
放り込んでますが、そんなのいらないよんということであれば、ご指摘
ください。> ALL
次のように実行します。
select * from getHoge(2,5);
結果はこんな感じ。
id |msg
----+----
2 |ccc
3 |dddd
4 |eeee
5 |ff
これで、クライアントアプリとのI/Fは関数名とパラメータ・戻り値だけ
合わせておけば済むという状態になったので、分業がかなり進むように
なりました。今まではINSERT/UPDATE/DELETEについては関数化していた
のですが、どうしても検索系は検索条件を与えるために、クライアント
側にSELECTを書かざるを得ないケースがあって、もどかしかったんです。
でも今回の方法で、すっきりとI/Fで分離できるようになってすごく
嬉しいです(^^) 石井さん本当にありがとうございますm(._.)m
# さあ開発進めなければ(^^; 納期直前で方針変更(^^;;
================================================================
★ワクワク音楽体験サイト それが【エア・ビート・ドットコム】!★
================================================================
有限会社エア・ビート(http://www.air-beat.com/)
取締役兼CEO 羽生 章洋(mailto:habu @ air-beat.com)
================================================================
pgsql-jp メーリングリストの案内