Остановить выполнение командного файла при ошибке для 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