我正在自动化一个必须连接到Oracle数据库并自动运行脚本的过程。
有人可以帮助我实现这一目标吗?
我已经编写了一个脚本,但是当我执行以下脚本时,它没有返回任何输出。
代码:
@echo off
set user_name=<username>
set password=<password>
set net_service_name= <tns_name>
echo exit | sqlplus -s %user_name%/%password%@%net_service_name% @f:\test.sql
pause
我正在使用Oracle 11g。我正在连接到特定区域的数据库。
此外,我需要以管理员用户身份连接到数据库。
答案 0 :(得分:1)
我认为问题出在net_service_name中的空格中。 @
是sqlplus的静默模式。对于诊断,请删除该键并添加"-S"
。
例如1. net_service_name中的空格。
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
例如2。
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
输出:
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
例如,3.以sysdba身份连接。
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
输出:
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
例如4.以sysdba身份连接。
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
输出:
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