[pgsql-jp: 39935] Re: PL/pgSQLでのプロシジャ実装について

takayuki-maruyama @ nova-system.com takayuki-maruyama @ nova-system.com
2009年 7月 22日 (水) 13:27:14 JST


お世話になります。丸山です。

石田@苫小牧市さん、アドバイスありがとうございました!

ISHIDA Akio さんは書きました:
> こんにちは。石田@苫小牧市と申します。
(中略)
> この方法で問題無いと思います。
> この時、関数のプロトタイプでOUTパラメータを指定されていないと
> 思うので、呼び出す側のSQLで、
> SELECT * FROM sp_demo(1, 2, 3) AS s(x int, y varchar, z varchar);
> とすることで実行できると思います。
> 
> あるいは、OUTパラメータを指定した場合は、
> CREATE OR REPLACE FUNCTION sp_demo(
> IN a INTEGER,
> IN b INTEGER,
> IN c INTEGER,
> ・・・・
> OUT x integer,
> OUT y character varying,
> OUT z character varying
> ) RETURNS SETOF record AS
> ...
>    FOR rec IN EXECUTE sqlstr LOOP
>        x := rec.x;
>        y := rec.y;
>        z := rec.z;
>        RETURN NEXT;
>    END LOOP;
> ...
> 
> のように、OUTパラメータに値を代入しつつ、
> 引数を指定しないRETURN NEXTを呼び出します。
後半でご教示いただいた方法で実行したところ、うまく意図した結果が返ってき
ました。
→結局、FORの中でrecに受け取った内容を返すところが漏れていたのですね....

> # 8.4であれば、RETURN QUERY EXECUTEが使えそうですが。
現行バージョンでの動作確認が終わってからになるかと思いますが、こちらも後
日確認させていただきたいと思います。

ともあれ数日間あれこれやってもダメで、9割がたあきらめていましたので、非
常に助かりました。
どうもありがとうございました。



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