[pgsql-jp: 39067] Re: 複数テーブルからの検索結果を、複数行列返す関数

ITAGAKI Takahiro itagaki.takahiro @ oss.ntt.co.jp
2008年 1月 25日 (金) 12:23:07 JST


NASUNO Isao <isao.nasuno @ ctc-g.co.jp> wrote:

> id      key
> ------------
>  1      aaaaaa bbbbbbb
>  2      cccccc ddddddd
> 
> というように返したいのですが、これは、
> 
>     functest
> ----------------------
>  (1,"aaaaaa bbbbbb")
> 
> のようになってしまいました。

関数を呼ぶときに、SELECT functest() ではなく、
SELECT * FROM functest() にしてみてはいかがでしょうか?


あと、おまけですが、OUT 引数を使うと記述が楽になるかもしれません。

-- テーブル定義
CREATE TABLE header (id integer, targetid integer);
CREATE TABLE target (id integer, name text, descript text);

-- テーブル関数
create function functest(id integer,
   OUT id integer,
   OUT key text)
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'
;

-- テスト
=# INSERT INTO target VALUES
    (1, 'aaaaaa', 'bbbbbbb'), (2, 'cccccc', 'ddddddd');
=# INSERT INTO header VALUES(1, 1), (1, 2);
=# SELECT * FROM functest(1);
 id |       key
----+-----------------
  1 | aaaaaa bbbbbbb
  1 | cccccc ddddddd
(2 rows)




pgsql-jp メーリングリストの案内