ON ERROR
|
|
statement
|
END-ERROR
|
ON ERROR
|
|
statement
|
|
DO
statement
DOEND
|
Dieser Abschnitt behandelt folgende Themen:
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Verwandte Statements: DECIDE FOR |
DECIDE ON | IF | IF
SELECTION
Das Statement ON ERROR dient dazu, Laufzeitfehler abzufangen, welche
andernfalls eine Natural-Fehlermeldung, den Abbruch des gerade ausgeführten Programms und
die Rückkehr zum Kommandoeingabe-Modus zur Folge hätten.
Sobald die Ausführung der in einem ON ERROR-Statement-Block angegebenen
Statements beginnt, ist der normale Programmablauf unterbrochen und kann nicht fortgesetzt
werden. Eine Ausnahme bildet Fehler 3145 (angeforderter Datensatz im Hold),
bei dem über ein RETRY-Statement die Verarbeitung genau an der Stelle, an der
sie unterbrochen wurde, fortgesetzt werden kann.
Dieses Statement ist nicht prozedural (das heißt, seine Ausführung hängt von einem Ereignis ab, nicht davon, wo im Programm es steht).
Jedes Natural-Objekt darf maximal ein ON ERROR-Statement enthalten.
| Syntax-Element | Beschreibung |
|---|---|
statement...
|
Festlegung der ON ERROR-Verarbeitung:
Um die Verarbeitung zu definieren, die stattfinden soll, wenn eine Verlassen eines ON
ERROR-Blocks:
Ein |
END-ERROR
|
Ende des ON-ERROR-Statements:
Im Structured Mode muss das für Natural reservierte Schlüsselwort
Im Reporting Mode werden die Statements |
Wird mittels CALLNAT, PERFORM oder FETCH RETURN eine Subprogramm-Struktur aufgebaut, so darf
jedes Modul dieser Struktur ein ON ERROR-Statement enthalten.
Tritt ein Fehler auf, so verfolgt Natural die Subprogramm-Struktur automatisch zurück und
wählt das erste in einem Subprogramm gefundene ON ERROR-Statement zur
Ausführung aus. Enthält keines der Module ein ON ERROR-Statement, gibt
Natural eine entsprechende Fehlermeldung aus, und es erfolgt - wie oben beschrieben - ein
Programmabbruch.
Die folgenden Natural-Systemvariablen können in Zusammenhang mit dem ON
ERROR-Statement (wie in dem folgenden Beispiel gezeigt) benutzt werden:
*ERROR-NR
|
Enthält die Fehlernummer des von Natural entdeckten Fehlers |
|---|---|
*ERROR-LINE
|
Enthält die Nummer der Quellcode-Zeile, in der das Statement steht, das den Fehler verursacht hat. |
** 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