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