如何使用批处理文件连接到Oracle数据库

3

我正在自动化一个过程,需要连接到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。我需要连接到特定地区的数据库。

此外,我需要以管理员用户身份连接到数据库。


我尝试了,但它没有起作用。 - Begginer
1个回答

2
我认为问题在于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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接