プロが教える店舗&オフィスのセキュリティ対策術

質問させていただきます

pg/plsqlのストアドファンクション内で
受け取った引数を


sql := select * from hoge;

FOR rec IN EXECUTE sql LOOP
return rec.col;     <<<この部分で
END LOOP;
return;

rec.引数名のようにして 引数から取得した
列を指定したいのですが、そのまま入れると
そのような列はありませんと言うような返事を
返されてしまいます。

うまくやる方法はないものでしょうか?
よろしくお願いします。

A 回答 (2件)

こんにちは。



なるほど・・・です。
残念ながら動的SQLじゃないので、コンパイル時にカラムの整合性をチェックしに行きます。
なので、本当は実行時にだけ参照して欲しいというささやかな願いは、聞き入れてくれません・・・。

動的SQLを使用するように変更するか、レコード型を宣言し、明示カーソルループ(こんな言い方でいいのかな???)でレコード型に代入、型のカラムを返す。
などという方向転換が必要かと・・・。
(^^ゞ
    • good
    • 0
この回答へのお礼

こんにちは

なるほど了解しました。
カーソルループのやりかたでやってみようと思います。

お返事ありがとうございました!

お礼日時:2004/09/28 18:32

こんばんは。



>>引数から取得した列を指定したいのですが
???

全体がつかめません・・・。
もう少しお願いします。
(^^ゞ

この回答への補足

わかりにくい文章で申し訳ありません。
「引数から取得した列を指定したいのですが」とは
引数で取得した文字列を
rec.列名 
の列名に代入して任意の列を取得したかったと言う意味なのです。

rec.$1 とか
rec. || $1

のようにしては($1は引数名)うまくいかなかったのでこのような質問をさせていただきました。

よろしければまたお願いいたします。

補足日時:2004/09/27 21:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!