1、如果你不需要logon到server3,那在a.bat中不需要用到user3/pss3,可以用/nologin参数指定不登陆模式
sqlplus.exe /nologin @c:\b.sql
2、可以使用whenever sqlerror命令来控制,在b.sql首部加上
WHENEVER SQLERROR EXIT 101 ROLLBACK

解决方案 »

  1.   

    不知道你写的是SQL脚本,还是存储过程。要是脚本,可能就用不了whenever sqlerror命令来控制( WHENEVER SQLERROR EXIT 101 ROLLBACK );如果是存储过程,就可以用。
      

  2.   

    其实KingSunSha(弱水三千) 给出的方法也不能完全解决你的问题,也就是说sqlplus其实就没给太多的空间。WHENEVER SQLERROR EXIT 是指当你的sql遇到错误时就退出sqlplus了。你也可以用select NAME into :var1 from v$database,看一下变量是否为空及库名是否为你要连接的库。
      

  3.   

    真的很感谢你们三位我重新说明一下我的不是存储过程,是执行的sql文件
      

  4.   

    再说明一下我的目的:
    从server1向server2上复制数据
    采用过程
    connect server2 -> delete server2相关数据-> copy server1的数据->..我想在delete 之前看看server1的连接状况,如果连不上(虽然可能性很小),就不执行复制
      

  5.   

    我的不是存储过程,是sql文件。
    还能用WHENEVER SQLERROR EXIT 101 ROLLBACK 吗?
      

  6.   

    有意识,想法很简单,但能做很复杂的事情! 其实,我也干过同样的事,用了同样的方法,但发现不行。后来我在两个数据库之间建立了一个database link,然后用copy命令实现了上述功能,启动的方式还是用a.bat的方式。
      

  7.   

    --有时间的请做个测试.Usage Notes
    The WHENEVER SQLERROR command is triggered by SQL command or PL/SQL block errors, and not by SQL*Plus command errors. Examples
    The commands in the following command file cause SQL*Plus to exit and return the SQL error code if the SQL UPDATE command fails: SQL> WHENEVER SQLERROR EXIT SQL.SQLCODE
    SQL> UPDATE EMP SET SAL = SAL*1.1
    The following SQL command error causes SQL*Plus to exit and return the SQL error code: SQL> WHENEVER SQLERROR EXIT SQL.SQLCODE
    SQL> select column_does_not_exiSt from dual;
    select column_does_not_exiSt from dual
           *
    ERROR at line 1:
    ORA-00904: invalid column nameDisconnected from Oracle.....
    The following SQL command error causes SQL*Plus to exit and return the value of the variable my_error_var: SQL> define my_error_var = 99
    SQL> WHENEVER SQLERROR EXIT my_error_var
    SQL> UPDATE non_existed_table set col1 = col1 + 1;UPDATE NON_EXISTED_TABLE set col1 = col1 + 1
           *
    ERROR at line 1:
    ORA-00942: table or view does not existDisconnected from Oracle.....
    The following examples show that the WHENEVER SQLERROR command does not have any effect on SQL*Plus commands, but does on SQL commands and PL/SQL blocks: SQL> WHENEVER SQLERROR EXIT SQL.SQLCODE
    SQL> column ename headIing "Employee Name"Unknown COLUMN option "headiing"SQL> show non_existed_optionUnknown SHOW option "non_existed_option"
    SQL> get non_existed_file.sql
    Unable to open "non_existed_file.sql"
    The following PL/SQL block error causes SQL*Plus to exit and return the SQL error code: SQL> WHENEVER SQLERROR EXIT SQL.SQLCODE
    SQL> begin
      2    select column_does_not_exiSt from dual;
      3  end;
      4  /select column_does_not_exiSt from dual;
           *
    ERROR at line 2:
    ORA-06550: line 2, column 10:
    PLS-00201: identifier 'COLUMN_DOES_NOT_EXIST' must be declared
    ORA-06550: line 2, column 3:
    PL/SQL: SQL Statement ignoredDisconnected from Oracle.....
      

  8.   

    请问
    如果加上101 ROLLBACK和
    SQL.SQLCODE有什么用
      

  9.   

    我试了
    101 ROLLBACK有问题
    会出现资源耗尽的错误。。
    加上SQL.SQLCODE  或者不加,没有问题,和预料一样