我正在尝试从命令行将参数传递给 SQL*Plus 脚本,通常它是这样工作的:
sqlplus -s login/pass@sid @script.sql some_param
在 script.sql 中,我可以使用 & 符号引用参数,就像这样:
&1
现在,我在 Windows 中执行此操作,两个第一个参数被"file"字符串和 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
有什么想法吗?
最佳答案
我尝试使用我的 Oracle 11gR2 附带的 SQL*Plus 的 native 版本进行重现,但我无法重现:
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
),因为我认为这可以解决您的问题。
关于SQL*Plus 命令行参数在 Windows 中被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22246811/