当我传入假脱机文件的名称时,我得到的文件名不正确。例如,我双击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命令中却没有。 –