我认为问题在于net_service_name中的空格。
"-S"
是sqlplus的静默模式。 如果需要诊断,请删除此键并添加
rem @echo off
。
例如1:net_service_name中的空格。
最初的回答:可能是因为空格导致net_service_name出错。请注意,
"-S"
是sqlplus的静默模式。如需进行诊断,请删除此项并添加
rem @echo off
。
rem @echo off
set user_name=scott
set password=tiger
set net_service_name= esmd
echo exit | sqlplus -s %user_name%/%password%@%net_service_name% @C:\upwork\stackoverflow\bat_sql\sqltest.sql
pause
输出:
C:\upwork\stackoverflow\bat_sql>echo exit | sqlplus -s scott/tiger@ esmd @C:\upwork\stackoverflow\bat_sql\sqltest.sql
Usage: SQLPLUS [ [<option>] [<logon>] [<start>] ]
where <option> ::= -H | -V | [ [-L] [-M <o>] [-R <n>] [-S] ]
<logon> ::= <username>[/<password>][@<connect_string>] | / | /NOLOG
<start> ::= @<URI>|<filename>[.<ext>] [<parameter> ...]
"-H" displays the SQL*Plus version banner and usage syntax
"-V" displays the SQL*Plus version banner
"-L" attempts log on just once
"-M <o>" uses HTML markup options <o>
"-R <n>" uses restricted mode <n>
"-S" uses silent mode
C:\upwork\stackoverflow\bat_sql>pause
最初的回答
例如2。
rem @echo off
set user_name=scott
set password=tiger
set net_service_name=esmd
echo exit | sqlplus -s %user_name%/%password%@%net_service_name% @C:\upwork\stackoverflow\bat_sql\sqltest.sql
pause
输出:
C:\upwork\stackoverflow\bat_sql>echo exit | sqlplus -s scott/tiger@esmd @C:\upwork\stackoverflow\bat_sql\sqltest.sql
SYSDATE
--------
24.01.19
Elapsed: 00:00:00.00
C:\upwork\stackoverflow\bat_sql>pause
例如 3. 以 sysdba 身份连接。最初的回答中提到了这一点。
rem @echo off
set user_name=sys
set password=manager
set net_service_name=esmd as sysdba
echo exit | C:\oracle\instantclient_11_2\sqlplus.exe -s %user_name%/%password%@%net_service_name% @C:\upwork\stackoverflow\bat_sql\sqltest.sql
pause
输出:
C:\upwork\stackoverflow\bat_sql>echo exit | C:\oracle\instantclient_11_2\sqlplus.exe -s sys/manageresmd@esmd as sysdba @C:\upwork\stackoverflow\bat_sql\sqltest.sql
SYSDATE
--------
24.01.19
C:\upwork\stackoverflow\bat_sql>pause
例如 4. 以 sysdba 身份连接。最初的回答中提到了这个步骤。
rem @echo off
set user_name=sys
set password=manager
set net_service_name=esmd as sysdba
rem
(
echo conn %user_name%/%password%@%net_service_name%
echo @C:\upwork\stackoverflow\bat_sql\sqltest.sql
echo exit
)| sqlplus -s /nolog
pause
输出结果:
最初的回答
C:\upwork\stackoverflow\bat_sql>(
echo conn sys/manageresmd@esmd as sysdba
echo @C:\upwork\stackoverflow\bat_sql\sqltest.sql
echo exit
) | sqlplus -s /nolog
Connected.
SYSDATE
--------
24.01.19
Elapsed: 00:00:00.00
For example sqltest.sql.
C:\upwork\stackoverflow\bat_sql>more sqltest.sql
select sysdate from dual;