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

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
------------------------------------------

A 回答 (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が数値の場合はシングル・ダブルのクォーテーションを削除してください。
    • good
    • 0

実行方法が下記の場合


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

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

DEFINE StartDT = '2004/01/01'


DEFINE EndDT = '2004/03/01'

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

StartDTとStartDTにBETWEENで使用する値が入っていないから、毎回値の入力が聞かれるのだと思います。


VB等のプログラムからこのSQLを動作させるのであればStartDTとStartDTに値を入れてから実行すれば動くと思うのですが。
OracleのSQL*Plusで動作させるには変数ではなく、値を書かないとダメなのではないでしょうか?
    • good
    • 0

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