【问题标题】:SQL*Plus command line parameters overwritten in Windows在 Windows 中覆盖的 SQL*Plus 命令行参数
【发布时间】:2014-04-10 09:45:44
【问题描述】:

我正在尝试从命令行将参数传递给 SQL*Plus 脚本,通常它是这样工作的:

sqlplus -s login/pass@sid @script.sql some_param

在 script.sql 中,我可以使用 & 号引用参数,如下所示:

&1

现在,我在 Windows 中执行此操作,两个第一个参数被“文件”字符串和 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 个参数显示正确。
  • 看起来问题出在 dist 上的 sqlplus 路径上 - 它安装在 "C:\Program Files (x86)\Oracle\product\11.1.0\client_1\BIN" 和值&1 和 &2 是路径部分除以空格。仍然不知道我能用这个做什么。

标签: sql windows oracle command-line sqlplus


【解决方案1】:

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

时,这是 Windows 上 Oracle 的问题

在执行 glogin.sql 脚本时,它试图运行参数为“Files\Oracle\...\glogin.sql”的“C:\Program”。

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

【讨论】:

    【解决方案2】:

    我尝试使用 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 可执行文件是原生的(还是一种手工制作的批处理)?
    • 您的操作系统是什么?

    更新:在你的 cmets 之后,我猜 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是来自路径的“文件”,而 &2 来自该路径以及“(x86)\Oracle\product\11.1.0\client_1\BIN”。只是用空格隔开...
    • 根据 11g SQLPlus 文档,glogin.sql 文件在您启动 SQLPlus 时运行。具体来说,这个文件在这里:$ORACLE_HOME/sqlplus/admin/glogin.sql。因此,它试图运行 glogin.sql 脚本,而“程序文件”中的空间正在搞砸。也许修改您的 ORACLE_HOME 环境变量以包含引号,并且调用 glogin.sql 可能会起作用。如果此调用不起作用,那么我将按照 Emmanuel 的建议重新安装。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2012-10-30
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多