[pgsql-jp: 39070] Re: 複数テーブルからの検索結果を、複数行列返す関数
ITAGAKI Takahiro
itagaki.takahiro @ oss.ntt.co.jp
2008年 1月 25日 (金) 15:59:14 JST
いたがきです。
NASUNO Isao <isao.nasuno @ ctc-g.co.jp> wrote:
> select functest(id) from
> (select header.id from header,target where 絞込み条件) alias;
functest が SQL で書かれた関数なら、().* が使えるようです。
select (functest(id)).* from
(select header.id from header,target where 絞込み条件) alias;
=# SELECT (functest(n)).* FROM (SELECT 1 AS n UNION SELECT 2) alias;
id | key
----+-----------------
1 | aaaaaa bbbbbb
1 | cccccc dddddd
2 | eeeeee ffffff
2 | gggggg hhhhhh
(4 rows)
ただ、functest が PL/pgSQL で書かれているとダメみたいです。
一貫性のない動作なので、なぜこうなっているのか不思議です。
=# SELECT (functest2(n)).* FROM (SELECT 1 AS n UNION SELECT 2) alias;
ERROR: set-valued function called in context that cannot accept a set
CONTEXT: PL/pgSQL function "functest2" line 12 at RETURN NEXT
pgsql-jp メーリングリストの案内