oracle - Weird dos batch script reporting of %errorlevel% -


in script below, when there sql error, %errorlevel% 0 - why this?

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 remove if block (below) %errorlevel% non zero! why if statement affect error level?

    (     echo whenever sqlerror exit failure     echo @release.sql     echo exit     ) | sqlplus x/x@orcl     echo error: %errorlevel%     if %errorlevel% gtr 0 goto dberror 

update: believe way testing error. think instead of:

if %errorlevel% gtr 0 goto dberror 

.. should using:

if errorlevel 1 goto dberror 

useful link here

sigh. it's horrible dos parsing, , point @ cmd replaces %errorlevel% value. when enclose commands (...), cmd first reads in commands though written on 1 line, expanding variables goes. in first code block, %errorlevel% replaced value when block parsed. it's if wrote:

if 3 gtr 2 (    (    echo whenever sqlerror exit failure    echo @release.sql    echo exit    ) | sqlplus x/x@orcl    echo error: 0    if 0 gtr 0 goto dberror ) 

(assuming $release 3). reason if errorlevel fix works cmd not (too) variable expansion on re-formulation. can use call avoid problem:

if %release% gtr 2 (     (     echo whenever sqlerror exit failure     echo @release.sql     echo exit     ) | sqlplus x/x@orcl     call echo error: %%errorlevel%%     call if %%errorlevel%% gtr 0 goto dberror ) 

(which think clearer startlocal enabledelayedexpansion , !errorlevel!—ymmv of course).


Comments

Popular posts from this blog

python - Scipy curvefit RuntimeError:Optimal parameters not found: Number of calls to function has reached maxfev = 1000 -

c# - How to add a new treeview at the selected node? -

java - netbeans "Please wait - classpath scanning in progress..." -