当我传递一个假脱机文件的名称时,我得到一个不正确的文件名。例如,我双击command.bat并输入' TEST' (在没有引号的情况下)在提示符下输入。脚本运行并正确查询数据库,但我的输出文件是' TESTcsv.LST' (再次没有引号)。如果我将文件名更改为正确的' TEST.csv',我可以看到输出正确。
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的情况下使用它。现在,我可以重命名该文件,但每次需要运行脚本时都必须这样做有点烦人。
答案 0 :(得分:0)
在搜索其他问题时,找到了以下回答我问题的内容。变量名必须以'。'结尾。正确连接变量和周围的字符串。 http://www.orafaq.com/node/515
现在,如果我想提示输入用户的名字(如Fred),并将提示设置为FredPrompt> ?简单地将变量填入其中将不会:
MyPrompt> set sqlp '&EnterNamePrompt> ' Enter value for enternameprompt: oops oops>
并且两者都不会连接,因为SQL * Plus不接受传递给其SET命令的值的连接:
oops> set sqlp '&EnterName' || 'Prompt> ' Enter value for entername: fred SP2-0158: unknown SET option "||" fred
此处要记住的超级用户提示是变量名称可以用句点终止。只需在变量名和后续文本之间插入一段时间:
SQL> set sqlp '&EnterName.Prompt> ' Enter value for entername: Fred FredPrompt>