在Windows中覆盖SQL * Plus命令行参数

时间:2014-03-07 09:55:09

标签: sql windows oracle command-line sqlplus

我试图从命令行将参数传递给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

任何想法发生了什么?

2 个答案:

答案 0 :(得分: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),因为我认为这可以解决您的问题。

答案 1 :(得分:0)

ORACLE_HOME 环境变量看起来像 C:\Program Files\Oracle11g\product\11.2.0.3\client_1

时,这是 Windows 上的 Oracle 的一个问题

在执行 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