2009年7月22日

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

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

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

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割がたあきらめていましたので、非
常に助かりました。
どうもありがとうございました。


投稿者 xml-rpc : 2009年7月22日 13:27
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/86866
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。