ON ERROR

#### Search Results

Search

# ON ERROR

#### Structured Mode-Syntax

`ON ERROR`
statement
`END-ERROR`

#### Reporting Mode-Syntax

`ON ERROR` |  | statement |
`DO` statement `DOEND`

Dieses Dokument behandelt folgende Themen:

- Funktion

- Einschränkung

- Syntax-Beschreibung

- ON ERROR-Verarbeitung in Subprogrammen

- Systemvariablen *ERROR-NR und *ERROR-LINE

- Beispiel

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`

## Funktion

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).

## Einschränkung

Jedes Natural-Objekt darf maximal ein `ON ERROR`-Statement enthalten.

## Syntax-Beschreibung

Syntax-Element | Beschreibung
--- | ---
`statement...` | Festlegung der ON ERROR-Verarbeitung: Um die Verarbeitung zu definieren, die stattfinden soll, wenn eine `ON ERROR`-Bedingung aufgetreten ist, können Sie eines oder mehrere Statements angeben. Verlassen eines ON ERROR-Blocks: Ein `ON ERROR`-Statement-Block kann mit einem der Statements `FETCH`, `STOP`, `TERMINATE`, `RETRY`, `ESCAPE ROUTINE` oder `ESCAPE MODULE` verlassen werden. Wird der Block nicht mit einem dieser Statements verlassen, gibt Natural eine entsprechende Fehlermeldung aus und bricht die Ausführung des Programms ab.
`END-ERROR` | Ende des ON-ERROR-Statements: Im Structured Mode muss das für Natural reservierte Schlüsselwort `END−ERROR` zum Beenden des `ON-ERROR`-Statements benutzt werden. Im Reporting Mode werden die Statements `DO ... DOEND` benutzt, um eines oder mehrere Statements anzugeben, und um das `ON−ERROR`-Statement zu beenden. Falls Sie nur ein einziges Statement angeben, können Sie die Statements `DO ... DOEND` weglassen. Das ist jedoch nicht im Sinne einer guten Kodierpraxis und wird nicht empfohlen.
`statement ...` `DO statement ... DOEND`

## ON ERROR-Verarbeitung in Subprogrammen

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.

## Systemvariablen *ERROR-NR und *ERROR-LINE

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 Sourcecode-Zeile, in der das Statement steht, das den Fehler verursacht hat.

## Beispiel

    ** 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

### On this page

- Funktion
- Einschränkung
- Syntax-Beschreibung
- ON ERROR-Verarbeitung in Subprogrammen
- Systemvariablen *ERROR-NR und *ERROR-LINE
- Beispiel