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

标签 sql windows oracle command-line sqlplus

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

相关文章:

mysql - 在触发器级联运行的单个查询期间哪些表受到影响

sql - 按月统计的 Access 查询数

mysql - 如何从 MySQL 中的表中进行一次大选择?

c# - 将 SQL 转换为 Linq left join with null

windows - 即使没有 SETLOCAL,在嵌套脚本中使用循环变量是否安全

c - 二进制模式下的 Windows 管道

sql - 除 INTO 或 VALUES 子句外,不能使用组项

java - Jetty(?) 在 Windows 上破坏大型 js 文件

sql - order by 与 union all 子句的有趣行为

oracle - ORA-06530 : Reference to uninitialized composite