В приведенном ниже сценарии при возникновении ошибки sql %errorlevel%
равно 0 - почему?
IF %RELEASE% GTR 2 (
(
echo WHENEVER SQLERROR EXIT FAILURE
echo @release.sql
echo exit
) | sqlplus x/x@orcl
echo error: %errorlevel%
if %errorlevel% gtr 0 goto dberror
)
Если я удалю блок if (см. Ниже), то% errorlevel% НЕ равен нулю! Почему оператор if влияет на уровень ошибки?
(
echo WHENEVER SQLERROR EXIT FAILURE
echo @release.sql
echo exit
) | sqlplus x/x@orcl
echo error: %errorlevel%
if %errorlevel% gtr 0 goto dberror
Обновление: поверьте, это был способ, которым я тестировал ошибку. Думаю вместо:
if %errorlevel% gtr 0 goto dberror
.. следует использовать:
if errorlevel 1 goto dberror
Полезная ссылка здесь
if errorlevel 1
на самом деле означаетif errorlevel is 1 or greater
. Уровень ошибок не является переменной среды. Он представляет собой код выхода последнего выполненного процесса и имеет собственный небольшой синтаксис if. : D - person GolezTrol   schedule 09.02.2011