• 締切済み

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

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

みんなの回答

  • zealzany
  • ベストアンサー率35% (19/53)
回答No.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が数値の場合はシングル・ダブルのクォーテーションを削除してください。

  • Struts
  • ベストアンサー率48% (29/60)
回答No.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 違っていたらごめんなさい。

  • mi-si
  • ベストアンサー率35% (200/567)
回答No.2

DEFINE StartDT = '2004/01/01' DEFINE EndDT = '2004/03/01' の用にあらかじめ変数を定義しておかないと行けないと思います。未定義の場合は値を聞かれます。

  • xyz0108f
  • ベストアンサー率39% (80/202)
回答No.1

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

関連するQ&A