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