Остановить выполнение командного файла при ошибке для sqlplus в Oracle

У меня есть 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 файл сценария.
  • Как предотвратить перезапись логов в файле журнала

1 ответ

Решение

Вам нужно проверять уровень ошибок после каждого вызова 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
Другие вопросы по тегам