ESCAPE

#### Search Results

Search

# ESCAPE

#### Structured Mode-Syntax

`ESCAPE` |  | `TOP` [`REPOSITION`] |
`BOTTOM` [(r)] [`IMMEDIATE`]
`ROUTINE` [`IMMEDIATE`]
`MODULE` [`IMMEDIATE`]

#### Reporting Mode-Syntax

`ESCAPE` |  |  | `TOP` [`REPOSITION`] |  |
`BOTTOM` [(r)] [`IMMEDIATE`]
`ROUTINE` [`IMMEDIATE`]
`MODULE` [`IMMEDIATE`]

Dieses Dokument behandelt folgende Themen:

- Funktion

- Syntax-Beschreibung

- Beispiel

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Verwandte Statements:

- `FIND` | `FOR` | `HISTOGRAM` | `PARSE JSON` | `PARSE XML` | `READ` | `READ RESULT SET (SQL)`| `READ WORK FILE` | `READLOB` | `REPEAT` | `SORT`

- `CALL` | `CALL FILE` | `CALL LOOP` | `CALLNAT` | `DEFINE SUBROUTINE` | `FETCH` | `PERFORM`

Gehört zur Funktionsgruppe:

- Schleifenverarbeitung

- Aufruf von Programmen und Subprogrammen

## Funktion

Das Statement `ESCAPE` dient dazu, den linearen Ablauf der Ausführung einer Verarbeitungsschleife oder eines Subprogramms zu unterbrechen.

Mit den Schlüsselwörtern `TOP`, `BOTTOM` und `ROUTINE` geben Sie an, wo die Verarbeitung nach dem `ESCAPE`-Statement fortgesetzt werden soll.

Ein `ESCAPE TOP`- bzw. `ESCAPE BOTTOM`-Statement bezieht sich immer auf die innerste gerade aktive Verarbeitungsschleife. Das `ESCAPE`-Statement muss nicht unbedingt innerhalb der Schleife stehen.

Befindet sich das `ESCAPE TOP`- bzw. `ESCAPE BOTTOM`-Statement in einem Subprogramm (Subroutine, Subprogramm oder mit `FETCH RETURN` aufgerufenes Programm), werden die innerhalb der Verarbeitungsschleife aufgerufenen Subprogramme automatisch beendet.

### Anmerkungen

In einer Verarbeitungsschleife können mehrere `ESCAPE`-Statements enthalten sein.

Die Ausführung eines `ESCAPE`-Statements kann an eine logische Bedingung geknüpft werden. Befindet sich das ESCAPE-Statement in einem `AT END OF DATA`-, `AT BREAK`- oder `AT END OF PAGE`-Statement-Block, so wird die Verarbeitung des betreffenden Blocks abgebrochen und die `ESCAPE`-Verarbeitung wie angegeben fortgesetzt.

Wird das `ESCAPE`-Statement während einer `IF NO RECORDS FOUND`-Bedingung ausgeführt, werden keine schleifenabschließenden Verarbeitungen durchgeführt (entspricht `ESCAPE IMMEDIATE`).

## Syntax-Beschreibung

Syntax-Element-Beschreibung

Syntax-Element | Beschreibung
--- | ---
`ESCAPE TOP` | TOP-Option: `TOP` bedeutet, dass die Verarbeitung am Anfang der Verarbeitungsschleife fortgesetzt werden soll, d.h. die Schleife wird erneut von Anfang an durchlaufen.
`REPOSITION` | TOP REPOSITION-Option: Wenn ein `ESCAPE TOP REPOSITION`-Statement ausgeführt wird, fährt Natural sofort mit der Verarbeitung am Anfang der aktiven `READ`-Schleife fort und benutzt dabei den aktuellen Wert der Suchvariable als neuen Startwert. Gleichzeitig setzt `ESCAPE TOP REPOSITION` die Systemvariable `*COUNTER` auf Null (0). `ESCAPE TOP REPOSITION` kann innerhalb einer `READ`-Statementschleife angegeben werden, die auf Adabas- oder VSAM-Datenbanken zugreift. Das betreffende `READ`-Statement muss die Option `WITH REPOSITION` enthalten.
`ESCAPE BOTTOM` | BOTTOM-Option: `BOTTOM` bedeutet, dass die Verarbeitung mit dem ersten Statement nach der Verarbeitungsschleife fortgesetzt werden soll. Die Schleife wird beendet, und schleifenabschließende Verarbeitungen (abschließendes `BREAK` und `END DATA`) werden für alle zu beendenden Schleifen ausgeführt. Im Reporting Mode ist `ESCAPE BOTTOM` die Voreinstellung.
`(r)` | Statement-Referenzierung: Notation `(r)`: Wenn auf `BOTTOM` ein Label oder eine Referenznummer folgt, wird die Verarbeitung mit dem ersten Statement nach der Verarbeitungsschleife fortgesetzt, das durch das Label oder die Referenznummer identifiziert wird. Ein Label oder eine Referenznummer kann jedoch nur dann angegeben werden, wenn das `ESCAPE BOTTOM`-Statement innerhalb der referenzierten Verarbeitungschleife steht.
`IMMEDIATE` | IMMEDIATE-Option: Wenn Sie das Schlüsselwort `IMMEDIATE` angeben, werden keine abschließenden schleifenbeendenden Verarbeitungen durchgeführt.
`ESCAPE ROUTINE` | ROUTINE-Option: Diese Option bewirkt, dass das aktive Natural-Subprogramm, das entweder über `PERFORM`, `CALLNAT`, `FETCH RETURN` oder als Hauptprogramm aufgerufen wurde, die Kontrolle abgibt. Im Falle einer Subroutine wird die Verarbeitung mit dem ersten Statement fortgesetzt, das auf das Statement folgt, mit dem die Subroutine aufgerufen wurde. Im Falle eines Hauptprogramms gelangt Natural in den Kommando-Modus. Alle aktiven Schleifen innerhalb des Subprogramms werden beendet und schleifenabschließende Verarbeitungen (`BREAK` und `END OF DATA`) sowie vom Benutzer bestimmte Gruppenwechsel-Verarbeitungen (`PERFORM BREAK`) durchgeführt, und zwar für alle betroffenen Verarbeitungsschleifen. Steht das `ESCAPE ROUTINE`-Statement in einem auf Stufe (Level) 1 ausgeführten Hauptprogramm, wird außerdem eine abschließende End-of-Page-Verarbeitung durchgeführt.
`ESCAPE MODULE` | MODULE-Option: Diese Option bewirkt, dass die gesamte aktive Programmebene, einschließlich aller internen Subroutinen, die Kontrolle abgibt. Die Kontrolle wird dann an das Objekt der vorherigen Programmebene zurückgegeben. Wenn `ESCAPE MODULE` in einer Hierarchie interner Subroutinen benutzt wird, ermöglicht es diese Option, alle auf dieser Ebene laufenden Subprogramme sofort zu verlassen. Wenn keine interne Subroutine aktiv ist, führt `ESCAPE MODULE` zum gleichen Ergebnis wie `ESCAPE ROUTINE`. `ESCAPE MODULE` ist nur bei internen Subroutinen von Bedeutung. Bei externen Subroutinen, Subprogrammen und aufgerufenen Programmen hat diese Option denselben Effekt wie `ESCAPE ROUTINE`. Wie bei `ESCAPE ROUTINE` wird eine schleifenabschließende Verarbeitung ausgeführt. Geben Sie aber das Schlüsselwort `IMMEDIATE` an, wird keine schleifenbeendende Verarbeitung ausgeführt.

## Beispiel

    ** Example 'ESCEX1': ESCAPE
    ************************************************************************
    DEFINE DATA LOCAL
    1 EMPLOY-VIEW VIEW OF EMPLOYEES
      2 CITY
      2 FIRST-NAME
      2 NAME
      2 AREA-CODE
      2 PHONE
    *
    1 #CITY (A20) INIT <' '>
    1 #CNTL (A1)  INIT <' '>
    END-DEFINE
    *
    REPEAT
      INPUT 'ENTER VALUE FOR CITY:  ' #CITY
          / 'OR ''.'' TO TERMINATE  '
      IF #CITY = '.'
        ESCAPE BOTTOM
      END-IF
      /*
      FND. FIND EMPLOY-VIEW WITH CITY = #CITY
        /*
        IF NO RECORDS FOUND
          WRITE 'NO RECORDS FOUND'
          ESCAPE BOTTOM (FND.)
        END-NOREC
        AT START OF DATA
          INPUT (AD=O) 'RECORDS FOUND:' *NUMBER //
                       'ENTER ''D'' TO DISPLAY RECORDS' #CNTL (AD=M)
          IF #CNTL NE 'D'
            ESCAPE BOTTOM (FND.)
          END-IF
        END-START
        /*
        DISPLAY NOTITLE NAME FIRST-NAME PHONE
      END-FIND
    END-REPEAT

Ausgabe des Programms `ESCEX1`:

    ENTER VALUE FOR CITY:  PARIS
    (OR '.' TO TERMINATE)

Nach Eingabe und Bestätigung des Namens der Stadt:

    RECORDS FOUND:        26
    ENTER 'D' TO DISPLAY RECORDS D

Ergebnis nach Eingabe und Bestätigung von `D`:

            NAME              FIRST-NAME         TELEPHONE
    -------------------- -------------------- ---------------

    MAIZIERE             ELISABETH            46758304
    MARX                 JEAN-MARIE           40738871
    REIGNARD             JACQUELINE           48472153
    RENAUD               MICHEL               46055008
    REMOUE               GERMAINE             36929371
    LAVENDA              SALOMON              40155905
    BROUSSE              GUY                  37502323
    GIORDA               LOUIS                37497316
    SIECA                FRANCOIS             40487413
    CENSIER              BERNARD              38070268
    DUC                  JEAN-PAUL            38065261
    CAHN                 RAYMOND              43723961
    MAZUY                ROBERT               44286899
    FAURIE               HENRI                44341159
    VALLY                ALAIN                47326249
    BRETON               JEAN-MARIE           48467146
    GIGLEUX              JACQUES              40477399
    KORAB-BRZOZOWSKI     BOGDAN               45288048
    XOLIN                CHRISTIAN            46060015
    LEGRIS               ROGER                39341509
    VVVV

### On this page

- Funktion
- Syntax-Beschreibung
- Beispiel