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