1

我有 4 个名为 test.bat 的文件,其中包含

@echo off
C:\oraclexe\app\oracle\product\10.2.0\server\BIN\sqlplus -s -l user/pass@localhost @E:\Oracle_Files\query.sql>E:\Oracle_Files\error.txt;
C:\oraclexe\app\oracle\product\10.2.0\server\BIN\sqlplus -s -l user/pass@localhost @E:\Oracle_Files\query1.sql>E:\Oracle_Files\error.txt

现在 query.sql 包含

WHENEVER SQLERROR EXIT SQL.SQLCODE
insert into mytable12 values('d');
exit;

并且 query1.sql 包含

WHENEVER SQLERROR EXIT SQL.SQLCODE
begin
insert into mytable1 values('d2');
end;
exit; 

现在的问题是 REAL TABLE NAME 是 mytable1,所以这里的问题是我想在错误出现在脚本下方时立即停止执行批处理文件,错误不应该被执行,并且错误errorlog.txt文件内容被替换为“ 1 row updated”,这意味着我的以前的错误消息被覆盖,我该如何停止呢?

简而言之有2个问题

  • 如何在错误时停止进一步执行脚本,尤其是 1 个脚本文件。
  • 如何防止覆盖日志文件中的日志
4

1 回答 1

3

您需要在每次调用 SQL*Plus 后检查错误级别

@echo off
C:\oraclexe\app\oracle\product\10.2.0\server\BIN\sqlplus -s -l user/pass@localhost @E:\Oracle_Files\query.sql>E:\Oracle_Files\error.txt;
if errorlevel 1 (
  goto error
)
C:\oraclexe\app\oracle\product\10.2.0\server\BIN\sqlplus -s -l user/pass@localhost @E:\Oracle_Files\query1.sql>>E:\Oracle_Files\error.txt
    if errorlevel 1 (
      goto error
    )
:: no error, skip error message
    goto end
    :error
      echo error occurred - check log file
    :end
于 2014-01-04T18:11:02.130 回答