0

我在批处理作业中遇到了一些错误问题。我目前每天运行 50 个批处理作业,并带有一个日志文件,它告诉我批处理作业是否成功完成。上周我注意到了一些错误,现在,我没有任何控制可以显示或只是告诉我批处理作业是否因错误而失败。我的批处理作业正在通过 sqlplus 启动 af 脚本。我试过使用错误级别,但 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
4

2 回答 2

0

您的批处理文件看起来不错。问题很可能与您的 SQL*PLUS 脚本有关。

如果 SQL*PLUS 脚本中发生错误,SQL*PLUS 默认不会返回错误。您可以在 SQL*PLUS 脚本中使用WHENEVER SQLERRORWHENEVER OSERROR来强制终止,并在出错时使用非零错误代码。

whenever sqlerror exit failure
whenever oserror exit failure

有多种选项可以更好地控制返回的代码,并控制事务行为(提交或回滚)。按照链接了解更多信息。

于 2014-06-26T10:14:12.950 回答
0

我认为 sqlplus 默认情况下不返回错误代码,所以总是返回 0。

此线程中描述了一些更改此选项的选项:

Sql*plus 总是返回退出码 0?

另一种方法是捕获输出并对其进行解析以检测错误。

于 2014-06-26T08:30:36.820 回答