0

バッチジョブのエラー 1 つに問題があります。現在、バッチジョブが正常に完了したかどうかを示すログ ファイルを使用して、毎日 50 個のバッチジョブを実行しています。先週、いくつかのエラーに気付きましたが、現在、バッチジョブがエラーで失敗したかどうかを表示または通知するコントロールがありません。私のバッチジョブは、sqlplus を介して af スクリプトを開始しています。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
4

2 に答える 2

0

あなたのバッチファイルは問題ないようです。問題は、SQL*PLUS スクリプトにある可能性が最も高いです。

SQL*PLUS スクリプト内でエラーが発生した場合、SQL*PLUS はデフォルトでエラーを返しません。SQL*PLUS スクリプト内でWHENEVER SQLERRORおよびWHENEVER OSERRORを使用して、エラー発生時にゼロ以外のエラー コードで強制終了することができます。

whenever sqlerror exit failure
whenever oserror exit failure

返されるコードをより適切に制御し、トランザクションの動作 (コミットまたはロールバック) を制御するためのさまざまなオプションがあります。詳細については、リンクをたどってください。

于 2014-06-26T10:14:12.950 に答える
0

デフォルトでは、sqlplus はエラー コードを返さないので、常に 0 を返すと思います。

これを変更するためのいくつかのオプションは、このスレッドで説明されています。

Sql*plus は常に終了コード 0 を返しますか?

もう 1 つの方法は、出力をキャプチャして解析し、エラーを検出することです。

于 2014-06-26T08:30:36.820 に答える