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