當我傳入假脫機文件的名稱時,我得到的文件名不正確。例如,我雙擊command.bat並在提示符處輸入'TEST'(不帶引號)並按回車。腳本運行並正確查詢數據庫,但是我的輸出文件是'TESTcsv.LST'(再次沒有引號)。如果我將文件名更改爲適當的'TEST.csv',我可以看到輸出是正確的。將spool文件名傳遞給SQL腳本作爲批處理文件中的參數 - 意外行爲
command.bat:
@echo off
SET /P name="Enter name: "
sqlplus username/password @script.sql %name%
script.sql:
--A whole bunch of formatting code
...
spool T:\&1.csv
SELECT * FROM tablename WHERE somecol='&1';
spool off
exit
而且,如果我改變sqlscript閱讀:
spool T:\'&1'.csv
我的輸出文件變成 'TEST' .csv格式。當我省略單引號時,爲什麼會刪除'。'在假脫機文件名中添加'.LST'?
請注意,傳遞給腳本的參數也在查詢中使用,沒有任何問題。
我也嘗試過使用sqlcmd實用程序傳遞參數,但沒有運氣,所以我想在沒有sqlcmd的情況下運行,如果可能的話。目前,我可以重命名該文件,但每次需要運行該腳本時都必須這樣做,這有點煩人。
如果我編輯的閥芯命令是'卷軸T:\&1..csv',我得到正確的輸出文件。如果有人能告訴我爲什麼第二個'。'是必要的,它將不勝感激。謝謝。 –
'&'是一種將兩個命令放在一行上的方法。 'dir&set'。這是特定的命令提示符。用雙引號括起或用脫字符轉義。 '複製con c:\ file ^&。txt'或'copy con「文件&.txt」'。 – 2016-10-03 19:48:29
@Noodles在這種情況下,'&'是SQL腳本的一部分,而不是命令提示符。它只是傳遞給SQL腳本的第一個參數。問題是在SQL查詢語句中,該參數顯示正確,但在spool命令中卻沒有。 –