dポイントプレゼントキャンペーン実施中!

こんにちは。

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

初歩的な質問ですみませんが、宜しくお願いします。

A 回答 (3件)

こんにちは。


column tmp new_value hensu
select 'atai' tmp from dual;
select * from dual where 'atai' = '&hensu';
    • good
    • 0

>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機能を利用して、小細工するとかしないと、うまくいかないと思います。
    • good
    • 0
この回答へのお礼

すみません。ご指摘のとおり私の勉強不足でした。
test.sqlで使われているのはユーザ変数の方です。

そうですか。。。と、すると簡単にはいかないわけですね?
まずはspool機能について勉強してみます。
ありがとうございました。m(_ _)m

お礼日時:2005/08/19 00:01

バインド変数を参照するには、変数名の前にコロンを付けるはず。



DEFINE hensu = :hensu_id

でどうですか?

この回答への補足

回答ありがとうございます。

早速、変数名の前にコロンをつけて実行してみたところ、「PL/SQLプロシージャが正常に完了しました。」が表示された後、test.sqlが実行された際、このような↓エラーがでます。

SP2-0552: バインド変数"hensu_id"が宣言されていません。

結果、セットされた値は、":hensu_id"でした。
そこで、test.sql側に"variable hensu_id number;"を追加してみましたが、SP2-0552エラーはでなくなりましたが、セットされた値は同じでした。

END;
/

で区切った時点で、変数は無効になるのでしょうか?

補足日時:2005/08/15 09:55
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す