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