ON ERROR |
statement |
END-ERROR |
ON ERROR
|
statement | ||
DO statement DOEND |
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連ステートメント:DECIDE FOR | DECIDE ON | IF | IF SELECTION
関連機能グループ:「論理条件の処理」
ON ERROR
ステートメントは実行時のエラーを拾い、Natural エラーメッセージを別の形で出力し、Natural プログラムの実行を終了させ、コマンド入力モードに戻すために使用します。
ON ERROR
ステートメントブロックの実行が開始されると、プログラムの正常な流れは中断され、再開することはできません。ただしエラー 3145(要求したレコードがホールド状態にある)の場合は、RETRY
ステートメントによって処理が中断された所から再開されます。
このステートメントは非手続き型なので、プログラム内の位置ではなくイベントによって実行されます。
各 Natural オブジェクト内で 1 回だけ、ON ERROR
ステートメントを使用できます。
statement... |
ON ERROR 処理の定義:
ON ERROR ブロックからの抜け出し
|
---|---|
END-ERROR | Natural 予約語 END-ERROR を使用して、ON ERROR ステートメントブロックを終了させる必要があります。
|
CALLNAT
、PERFORM
または FETCH RETURN
を使用したサブルーチン構成になっている場合、各モジュールに ON ERROR
ステートメントが指定可能です。
エラーが起きた場合、Natural は自動的にサブルーチン構成に従って戻り、実行中のサブルーチン内で最初に見つかった ON ERROR
ステートメントを選択します。 ON ERROR
ステートメントがどのレベルのどのモジュールにもない場合は、通常のエラーメッセージ処理を行い、プログラムの実行が終了します。
次の Natural システム変数は、(次の例で示すように)ON ERROR
ステートメントと組み合わせて使用できます。
*ERROR-NR | Natural で検出されたエラーの数が含まれます。 |
---|---|
*ERROR-LINE | エラーの原因となったステートメントの行番号が含まれます。 |
** Example 'ONEEX1': ON ERROR ** ** CAUTION: Executing this example will modify the database records! ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 NAME 2 CITY * 1 #NAME (A20) 1 #CITY (A20) END-DEFINE * REPEAT INPUT 'ENTER NAME:' #NAME IF #NAME = ' ' STOP END-IF FIND EMPLOY-VIEW WITH NAME = #NAME INPUT (AD=M) 'ENTER NEW VALUES:' /// 'NAME:' NAME / 'CITY:' CITY UPDATE END TRANSACTION /* ON ERROR IF *ERROR-NR = 3009 WRITE 'LAST TRANSACTION NOT SUCCESSFUL' / 'HIT ENTER TO RESTART PROGRAM' FETCH 'ONEEX1' END-IF WRITE 'ERROR' *ERROR-NR 'OCCURRED IN PROGRAM' *PROGRAM 'AT LINE' *ERROR-LINE FETCH 'MENU' END-ERROR /* END-FIND END-REPEAT END