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