我试图从命令行将参数传递给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
任何想法发生了什么?
答案 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>
我的第一次尝试是:
更新:在您发表评论之后,我想必须以某种方式调用glogin.sql
作为命令参数,但不附带引号。我的测试有效但客户端安装在C:\oracle
(没有空白),这可能就是为什么它对我有用......
我要做的是将您的客户端重新安装在没有空白的目录中(为什么不是C:\oracle
),因为我认为这可以解决您的问题。
答案 1 :(得分:0)
当 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