こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

置換変数が再利用できない

OracleのSQL*Plusで、&を使った置換変数を利用していますが、
「&&」にしても、毎回値の入力を求められます。
何が悪いのかわかりません。
どなたか教えてください。宜しくお願いします。

---TEST.sql-------------------------------
SET PAGES 0
SET COLSEP ','
SET LIN 1000
SET Trimspool on

SPOOL c:\work\testresult.txt

SELECT * FROM temp
WHERE module_DATE BETWEEN '&StartDT' and '&EndDT';

SELECT * FROM temp2
WHERE module_DATE BETWEEN '&&StartDT' and '&&EndDT';

SPOOL OFF
------------------------------------------

投稿日時 - 2004-02-19 11:51:16

QNo.783752

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

sql.txt
-----------
SELECT * FROM temp
WHERE module_DATE BETWEEN '&1' and '&2';

SELECT * FROM temp2
WHERE module_DATE BETWEEN '&1' and '&2';

SQL*PLUSにて
@c:\sql.txt "StartDTの値" "EndDTの値"

これでどうでしょうか?
また**DTが数値の場合はシングル・ダブルのクォーテーションを削除してください。

投稿日時 - 2004-02-19 14:54:32

ANo.3

実行方法が下記の場合
SQL > @TEST

&&を&一つにする。
SELECT * FROM temp
WHERE module_DATE BETWEEN '&StartDT' and '&EndDT';

SELECT * FROM temp2
WHERE module_DATE BETWEEN '&StartDT' and '&EndDT'

そして実行は下記とする。
SQL > @TEST パラメータ1 パラメータ2

違っていたらごめんなさい。

投稿日時 - 2004-02-19 14:10:05

ANo.2

DEFINE StartDT = '2004/01/01'
DEFINE EndDT = '2004/03/01'

の用にあらかじめ変数を定義しておかないと行けないと思います。未定義の場合は値を聞かれます。

投稿日時 - 2004-02-19 12:24:02

ANo.1

StartDTとStartDTにBETWEENで使用する値が入っていないから、毎回値の入力が聞かれるのだと思います。
VB等のプログラムからこのSQLを動作させるのであればStartDTとStartDTに値を入れてから実行すれば動くと思うのですが。
OracleのSQL*Plusで動作させるには変数ではなく、値を書かないとダメなのではないでしょうか?

投稿日時 - 2004-02-19 12:07:44

あなたにオススメの質問