ON ERROR |
statement |
END-ERROR |
ON ERROR |
statement | ||
DO statement DOEND |
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連ステートメント:DECIDE
FOR
| DECIDE
ON
| IF
| IF SELECTION
ON ERROR
ステートメントは実行時のエラーを拾い、Natural エラーメッセージを別の形で出力し、Natural プログラムの実行を終了させ、コマンド入力モードに戻すために使用します。
ON ERROR
ステートメントブロックの実行が開始されると、プログラムの正常な流れは中断され、再開することはできません。ただし Natural エラー 3145(要求したレコードがホールド状態にある)の場合は、RETRY
ステートメントによって処理が中断された所から再開されます。
このステートメントは非手続き型なので、プログラム内の位置ではなくイベントによって実行されます。
各 Natural オブジェクト内で 1 回だけ、ON ERROR
ステートメントを使用できます。
構文要素 | 説明 |
---|---|
statement... |
ON ERROR 処理の定義:
ON ERROR ブロックからの抜け出し
|
END-ERROR |
ON ERROR ステートメントブロックの終了:
ストラクチャードモードでは、 レポーティングモードでは、 |
CALLNAT
、PERFORM
または FETCH RETURN
ステートメントによって作成されたオブジェクト呼び出し階層では、各オブジェクトに ON ERROR
ステートメントを含めることができます。
エラーが起きた場合、Natural は呼び出し階層をさかのぼり、実行するオブジェクトで最初に見つかった ON ERROR
ステートメントを選択します。
詳細については、『プログラミングガイド』の「アプリケーションエラーの処理」を参照してください。
次の Natural システム変数は、(次の例で示すように)ON ERROR
ステートメントと組み合わせて使用できます。
システム変数 | 説明 |
---|---|
*ERROR-NR |
Natural で検出されたエラーの数が含まれます。 |
*ERROR-LINE |
エラーの原因となったステートメントの行番号が含まれます。 |
*PROGRAM |
現在実行中の Natural オブジェクトの名前が格納されます。 |
** 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