[pgsql-jp: 39066] 複数テーブルからの検索結果を、複数行列返す関数
NASUNO Isao
isao.nasuno @ ctc-g.co.jp
2008年 1月 25日 (金) 11:08:34 JST
那須野と申します。
タイトルのような関数を作りたいのですが、実現方法が分からず投稿しました。
作ってみたのは下記のような関数です。
簡略化していますが、実際は「target」のようなテーブルが、もっと多く登場します。
--------------------------------------------------
create function functest(id integer)
returns setof record
as
'
select
header.id, target.name||'' ''||target.descript as key
from
header,
target
where
header.id=$1 and header.targetid=target.id
'
language 'sql'
;
-------------------------------------------------
ここで、header には大量のレコードが入る予定です。
target のレコード数は、header よりも十分少ない予定です。
header.targetid と target.id がヒモづいています。
header を別の条件で絞り込んでおいてから、そのIDを関数の引数にして
descript+nameの情報を一緒に受け取りたい、というのが目的です。
この関数が返す結果を、さらに別の検索文に流し込むつもりで、この先も結構長い道のりです。
この部分をうまく関数で纏め上げれば、ハッピーという状況です。
結果を、
id key
------------
1 aaaaaa bbbbbbb
2 cccccc ddddddd
:
というように返したいのですが、これは、
functest
----------------------
(1,"aaaaaa bbbbbb")
:
のようになってしまいました。
LOOPとか IN EXECUTE とかを試そうとしたのですが、ドキュメントを読んでも
いまいち、ついていけず、エラー連発でくじけてしまいました。
どなたか、ご教授願えないでしょうか。
よろしくお願いします。
/那須野 功(ex.7539)
pgsql-jp メーリングリストの案内