ON ERROR |
| statement |
END-ERROR |
ON ERROR |
|
statement |
|
DOstatement 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