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

NASUNO Isao isao.nasuno @ ctc-g.co.jp
2008年 1月 25日 (金) 16:40:47 JST


いたがきさま

那須野です。

教えていただいた方法で、できました!
当座の問題は、とりあえず解決しました。
ありがとうございました。

これからも関数を作る場面が出てきそうなのですが、
PL/pgSQL と SQL の違いが、私にはよく飲み込めません。

PL/pgSQL=SQL手続き言語というのは、LOOPやFORなどを使って、
手続き式にSQLを処理するような記述をしたものでしょうか。

今回、FOR、LOOP、IN EXECUTE などを使った例も参考にしたのですが(難しくて挫折した)、
これらには、教えていただいた方法は使えないということでしょうか?

参考までに、お願いします!


ITAGAKI Takahiro wrote:
> いたがきです。
> 
> 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
> 


-- 
〒100-6080 東京都千代田区霞が関3-2-5 霞が関ビル
伊藤忠テクノソリューションズ株式会社 地球科学部
那須野 功
Phone : 03-6203-7539(直) / Fax : 03-3539-5174
Email : isao.nasuno @ ctc-g.co.jp




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