[pgsql-jp: 39068] Re: 複数テーブルからの検索結果を、複数行列返す関数
NASUNO Isao
isao.nasuno @ ctc-g.co.jp
2008年 1月 25日 (金) 13:45:44 JST
那須野です。
早速のご教授、ありがとうございます。
> 関数を呼ぶときに、SELECT functest() ではなく、
> SELECT * FROM functest() にしてみてはいかがでしょうか?
OUT引数というのを使って再定義したら、期待した結果を得ることができました。
なのですが、ここでは、たとえば、
select functest(id) from
(select header.id from header,target where 絞込み条件) alias;
のような使い方をしたくて select functest() の形式を実現したかったのです。
select * from functest(
(select header.id from header,target where 絞込み条件)
);
という感じに出来ればいいのですが、やり方が分かりません(出来ない気がします)。
これに近い文法はないでしょうか?
どうぞよろしくお願いします。
ITAGAKI Takahiro wrote:
> 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 メーリングリストの案内