- 締切済み
SELECT文の結果をDEFINEの値として使用したいのですが。。。 [Oracle9i]
こんにちは。 test.sqlでバインド変数として使用されている"hensu"に対して、SELECT文の結果を代入したいと考えています。 そこで、DEFINEで下記のようにセットしてみようとしたのですが、"hensu"には"hensu_id"という文字として入ってしまうようです。 DECLARE hensu_id number ; BEGIN select min(id) into hensu_id; END; / DEFINE hensu =hensu_id @c:\test.sql 初歩的な質問ですみませんが、宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- jmh
- ベストアンサー率23% (71/304)
こんにちは。 column tmp new_value hensu select 'atai' tmp from dual; select * from dual where 'atai' = '&hensu';
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
>test.sqlでバインド変数として使用されている"hensu"に対して、SELECT文の結果を代入したいと考えています。 理解に間違いがあるので、その訂正から.. 「DEFINE hensu =」で定義するのは、バインド変数でなく、ユーザ変数です。 SQL*PLUSのスクリプト上で、変数(&~)として記述した箇所を置き換えるものです。 本当に、test.sqlでバインド変数(hensu)が使われているのなら、 var hensu number; begin select min(id) into :hensu from ~; end; / @c:\test.sql で良いはずです。 そうでなくて、test.sqlで使われているのは、ユーザ変数(&hensu)ということなら 実現するのが、ちょっと難しい。 spool機能を利用して、小細工するとかしないと、うまくいかないと思います。
- PCFREAK
- ベストアンサー率51% (417/805)
バインド変数を参照するには、変数名の前にコロンを付けるはず。 DEFINE hensu = :hensu_id でどうですか?
補足
回答ありがとうございます。 早速、変数名の前にコロンをつけて実行してみたところ、「PL/SQLプロシージャが正常に完了しました。」が表示された後、test.sqlが実行された際、このような↓エラーがでます。 SP2-0552: バインド変数"hensu_id"が宣言されていません。 結果、セットされた値は、":hensu_id"でした。 そこで、test.sql側に"variable hensu_id number;"を追加してみましたが、SP2-0552エラーはでなくなりましたが、セットされた値は同じでした。 END; / で区切った時点で、変数は無効になるのでしょうか?
お礼
すみません。ご指摘のとおり私の勉強不足でした。 test.sqlで使われているのはユーザ変数の方です。 そうですか。。。と、すると簡単にはいかないわけですね? まずはspool機能について勉強してみます。 ありがとうございました。m(_ _)m