当程序路径包含空格时,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 中的单词中间点击空格时光标移动最后一行

iPhone 6,6 plus 没有显示正确的预览?

在 SQL Plus 中,当在 Oracle 11g 及更高版本中使用 lpad 时,第二列会获得额外的尾随空格

在log4j.properties中每日appender文件路径,空间不起作用

如果路径包含空格,则 Zip 中文件的 URI 不正确

SQL*PLUS的相关命令