当程序路径包含空格时,SQL*plus 不会正确标记其命令行参数
Posted
技术标签:
【中文标题】当程序路径包含空格时,SQL*plus 不会正确标记其命令行参数【英文标题】:SQL*plus does not tokenize its command-line arguments properly when the program path contains spaces 【发布时间】:2011-09-19 12:13:02 【问题描述】:我正在使用带有以下命令行的 SQL*Plus:
sqlplus user/pw@TNS @test.sql foo
test.sql
的内容如下:
SET VERIFY ON
DEFINE argone='&&1'
SELECT '&argone' FROM dual;
EXIT SQL.sqlcode
结果:
当 SQL*Plus 可执行文件位于C:\Program Files\Oracle Client\whatever\sqlplus.exe
中时,&&1
的计算结果为 Files\Oracle
。
当 SQL*Plus 可执行文件位于 C:\Oracle\Client\10.2.xx\bin
中时,&&1
的计算结果为 foo
。
有没有人遇到过这个问题并有办法规避它?
【问题讨论】:
【参考方案1】:您需要在命令行和define
语句中都使用双引号来正确捕获带有空格的参数。
脚本:
SET VERIFY ON
DEFINE argone="&&1"
SELECT '&argone' FROM dual;
EXIT SQL.sqlcode
命令行:
sqlplus user/pw@TNS @test.sql "foo bar"
【讨论】:
以上是关于当程序路径包含空格时,SQL*plus 不会正确标记其命令行参数的主要内容,如果未能解决你的问题,请参考以下文章
在 UITextview 中的单词中间点击空格时光标移动最后一行
在 SQL Plus 中,当在 Oracle 11g 及更高版本中使用 lpad 时,第二列会获得额外的尾随空格