我注意到 ORACLE_HOME 和参数替换之间的奇怪交互。这是我的test.sql
prompt &1
prompt &2
prompt &3
prompt &4
exit
预期的行为:
C:\cygwin64\home\rejap\subst>sqlplus /nolog @test.sql one two three four five
SQL*Plus: Release 12.2.0.1.0 Production on Sun Jun 16 15:19:16 2019
Copyright (c) 1982, 2017, Oracle. All rights reserved.
one
two
three
four
C:\cygwin64\home\rejap\subst>
然而,当 ORACLE_HOME 被设置时,事情变得有趣了
C:\cygwin64\home\rejap\subst>set ORACLE_HOME=c:\Program Files (x86)\Oracle\product\12.2.0\client_1
C:\cygwin64\home\rejap\subst>sqlplus /nolog @test.sql one two three four five
SQL*Plus: Release 12.2.0.1.0 Production on Sun Jun 16 15:21:25 2019
Copyright (c) 1982, 2017, Oracle. All rights reserved.
Files
(x86)\Oracle\product\12.2.0\client_1\sqlplus\admin\glogin.sql
three
four
C:\cygwin64\home\rejap\subst>
我在这里错过了一些基本的东西吗?
根本不设置 ORACLE_HOME 有什么负面影响吗?
将 ORACLE_HOME 指向符号链接有什么负面影响吗?
c:
cd \
mklink /D oracle c:\Program Files (x86)\Oracle
set ORACLE_HOME=c:\oracle\product\12.2.0\client_1
当然,我有兴趣解释正在发生的事情。
sqlplus 等很多程序都不需要
ORACLE_HOME
设置。在本文档 9.2 Oracle 中指出:
我没有找到关于从不发布 Oracle 的类似声明,所以它可能已经过时了。较新的 Windows 安装指南根本没有提及 ORACLE_HOME 环境变量,因此很可能确实不需要它。
您缺少的基础是命令行('sqlplus ......')在 sqlplus 得到任何东西之前由操作系统命令处理器处理。命令处理器将每个空格视为下一个命令行参数的分隔符,以传递给它正在设置的任何可执行文件。