我在一些批处理作业中遇到了一些错误。我现在每天运行50个批处理作业,有一个日志文件,它告诉我批处理作业是否成功完成。上周我注意到了一些错误,现在,我没有任何控件来显示或只是告诉我批处理作业是否失败并出现错误。我的批处理作业正在通过sqlplus启动一个脚本。我试过使用errorlevel,但id不起作用。
到目前为止,我的批处理作业看起来是这样的。我已经包含了我试图使用的错误级别代码。
@Echo Off
@For /F "tokens=1,2,3,4 delims=-/ " %%A in ('Date /t') do @(
Set Day=%%A
Set Month=%%B
Set Year=%%C
Set All=%%A-%%B-%%C
)
@For /F "tokens=1,2,3 delims=:,. " %%A in ('echo %time%') do @(
Set Hour=%%A
Set Min=%%B
Set Sec=%%C
Set Allm=%%A.%%B.%%C
)
@For /F "tokens=3 delims=: " %%A in ('time /t ') do @(
Set AMPM=%%A
@Echo On
)
echo Start: %date% %time% >> ..\log\Scriptname_%All%_%Allm%.log
sqlplus "Script" >> ..\log\Scriptname_%All%_%Allm%.log
IF %errorlevel% NEQ 0 GOTO :Error
GOTO :Success
:error
echo There was an error.
echo Stop: %date% %time% >> ..\log\Scriptname_%All%_%Allm%.log
EXIT 1
:end
echo Success.
echo Stop: %date% %time% >> ..\log\Scriptname_%All%_%Allm%.log
EXIT 0发布于 2014-06-26 16:30:37
我认为sqlplus在默认情况下不会返回错误代码,所以总是返回0。
此线程中描述了一些用于更改此设置的选项:
Sql*plus always returns exit code 0?
另一种方法是捕获输出并对其进行解析以检测错误。
发布于 2014-06-26 18:14:13
您的批处理文件看起来没问题。问题很可能出在SQL*PLUS脚本上。
默认情况下,如果SQL*PLUS脚本中发生错误,SQL*PLUS不会返回错误。您可以在SQL*PLUS脚本中使用WHENEVER SQLERROR和WHENEVER OSERROR,以便在出错时使用非零错误代码强制终止。
whenever sqlerror exit failure
whenever oserror exit failure有各种选项可以更好地控制返回的代码,并控制事务行为(提交或回滚)。点击链接获取更多信息。
https://stackoverflow.com/questions/24425473
复制相似问题