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