在Windows中,SQL*Plus命令行参数被覆盖了。

4
我将尝试从命令行传递参数到SQL*Plus脚本,通常会这样操作:
sqlplus -s login/pass@sid @script.sql some_param

在script.sql中,我可以使用&符号引用参数,例如:

&1

现在,我正在Windows中进行操作,前两个参数被“Files”字符串和glogin.sql脚本的某些路径覆盖 - 其余参数工作正常。因此,例如当我像这样调用sqlplus时:
sqlplus -s login/pass@sid @script.sql par1 par2 par3 par4

脚本看起来像这样:

prompt &1
prompt &2
prompt &3
prompt &4

我得到了这个输出:
Files
(x86)\Oracle\product\11.1.0\client_1\\sqlplus\admin\glogin.sql
par3
par4

你有没有任何想法发生了什么?


我无法重现你的问题 - 我使用的是Windows XP,Oracle 11gR2,并且这4个参数都正确显示。 - Emmanuel
看起来问题出在dist上的sqlplus路径上 - 它安装在“C:\Program Files (x86)\Oracle\product\11.1.0\client_1\BIN”,而&1和&2的值是由空格分隔的路径部分。仍然不知道我该怎么做。 - WojtusJ
2个回答

3
我尝试使用随Oracle 11gR2提供的本地版本SQL*Plus进行复制,但我无法复制:
“dummy.sql”脚本:
prompt &1
prompt &2
prompt &3
prompt &4

select 1 a from dual;

exit

输出:

E:\CFM\Dev\SQL>sqlplus -s guest/guest@DEV @dummy.sql 1 2 3 4
1
2
3
4

         A
----------
         1


E:\CFM\Dev\SQL>

我的第一次尝试会是:

  • 你的sqlplus可执行文件是原生的(还是自制的批处理)?
  • 你使用的操作系统是什么?

更新:根据您的评论,我猜想必须以某种方式调用glogin.sql作为命令参数,但不要加上引号。我的测试可以工作,但客户端安装在没有空格的C:\oracle中,这可能是为什么它对我有效的原因...

我会重新安装您的客户端到一个没有空格的目录中(为什么不选C:\oracle),因为我认为这可以解决您的问题。


我正在使用Windows 7,SQLPlus是本地的(我正在执行sqlplus.exe)。我不知道它是否有关联,但是SQLPlus的路径是: “C:\ Program Files(x86)\ Oracle \ product \ 11.1.0 \ client_1 \ BIN” 所以看起来&1是路径中的“Files”,&2也来自该路径“(x86)\Oracle\product\11.1.0\client_1\BIN”。只是用空格分隔... - WojtusJ
1
根据11g SQLPlus文档,glogin.sql文件在启动SQLPlus时运行。具体来说,该文件位于$ORACLE_HOME/sqlplus/admin/glogin.sql。因此,它正在尝试运行glogin.sql脚本,而“Program Files”中的空格会导致问题。也许修改您的ORACLE_HOME环境变量以包括引号,或者可能会起作用。如果这个调用不起作用,那么我建议像Emmanuel建议的那样重新安装。 - Patrick Bacon

0

这是关于Oracle在Windows上的一个问题,当ORACLE_HOME环境变量看起来像C:\Program Files\Oracle11g\product\11.2.0.3\client_1时。

在执行glogin.sql脚本时,它试图以"C:\Program"为参数运行,并带有"Files\Oracle\...\glogin.sql"。

ORACLE_HOME修改为C:\Progra~1\Oracle11g\product\11.2.0.3\client_1应该可以解决这个问题。

通过Windows CMD,这应该可以解决问题。

SETX ORACLE_HOME C:\Progra~1\Oracle11g\product\11.2.0.3\client_1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接