当程序路径包含空格时,SQL*plus不会正确地标记其命令行参数

Ben*_*oit 6 oracle whitespace sqlplus

我使用SQL*Plus使用以下命令行:

sqlplus user/pw@TNS @test.sql foo
Run Code Online (Sandbox Code Playgroud)

内容test.sql如下:

SET VERIFY ON
DEFINE argone='&&1'
SELECT '&argone' FROM dual;
EXIT SQL.sqlcode
Run Code Online (Sandbox Code Playgroud)

结果:

  • 当SQL*Plus可执行文件中C:\Program Files\Oracle Client\whatever\sqlplus.exe,然后&&1计算到Files\Oracle.
  • 当SQL*Plus可执行文件中C:\Oracle\Client\10.2.xx\bin,然后&&1计算到foo.

有没有人遇到这个问题并有办法规避它?

All*_*lan 2

您需要在命令行和define语句中使用双引号才能正确捕获带空格的参数。

脚本:

SET VERIFY ON
DEFINE argone="&&1"
SELECT '&argone' FROM dual;
EXIT SQL.sqlcode
Run Code Online (Sandbox Code Playgroud)

命令行:

sqlplus user/pw@TNS @test.sql "foo bar"
Run Code Online (Sandbox Code Playgroud)