Jeder Datei im Programm können mit der FILE STATUS-Klausel Datenfelder zugeordnet werden, in denen das Laufzeitsystem nach jedem Zugriff auf die Datei Informationen darüber hinterlegt,
- ob die Ein-/Ausgabeoperation erfolgreich war und
- welcher Art ggf. die dabei aufgetretenen Fehler sind.
Diese Informationen können z.B. in den DECLARATIVES durch USE-Prozeduren ausgewertet werden und gestatten eine Analyse von Ein-/Ausgabefehlern durch das Programm. Als Erweiterung zum COBOL-Standard bietet COBOL2000 die Möglichkeit, in diese Analyse durch die Schlüssel der DVS-Fehlermeldungen einzubeziehen. Dadurch lässt sich eine feinere Differenzierung der Fehlerursachen erreichen.
Die FILE STATUS-Klausel wird im FILE-CONTROL-Paragrafen der ENVIRONMENT DIVISION angegeben; ihr Format ist (siehe Handbuch „COBOL2000-Sprachbeschreibung“ [1]):
FILE STATUS IS datenname-1 [datenname-2]
Dabei müssen datenname-1 und, falls angegeben, datenname-2 in der WORKING-STORAGE SECTION oder der LINKAGE SECTION definiert sein. Für die Formate und die möglichen Werte dieser beiden Datenfelder gelten folgende Regeln:
datenname-1
muss als zwei Byte langes alphanumerisches Datenfeld erklärt werden, also z.B.
01 datenname-1 PIC X(2).
enthält nach jeder Ein-/Ausgabeoperation auf die zugeordnete Datei einen zweistelligen numerischen Zustandscode, dessen Bedeutung der Tabelle am Ende dieses Abschnitts entnommen werden kann.
datenname-2
muss als sechs Byte langes Gruppenfeld der folgenden Struktur erklärt werden:
01 datenname-2. 02 datenname-2-1 PIC 9(2) COMP. 02 datenname-2-2 PIC X(4).
dient der Aufnahme des DVS-Fehlerschlüssels (DVS-Codes) zum jeweiligen Ein-/Ausgabezustand und enthält nach jedem Zugriff auf die zugeordnete Datei einen Wert, der vom Inhalt des Feldes datenname-1 abhängt und sich aus folgender Zusammenstellung ergibt:
Inhalt von
datenname-1
ungleich 0?DVS-Code
ungleich 0?Wert von
datenname-2-1Wert von
datenname-2-2nein
nicht relevant
undefiniert
undefiniert
ja
nein
0
undefiniert
ja
ja
64
DVS-Code der zugeordneten Fehlermeldung
Die DVS-Codes und die zugeordneten Fehlermeldungen können dem Handbuch [4] entnommen werden.
Ein-/Ausgabe-Zustand | Bedeutung |
Erfolgreiche Ausführung | |
00 | Die Ein-/Ausgabe-Anweisung wurde erfolgreich ausgeführt. |
02 | Ein Satz wurde über ALTERNATE KEY gelesen, und es existiert bei sequenziel lem Weiterlesen über denselben Schlüssel noch mindestens ein Nachfolgesatz mit identischem Schlüsselwert. |
04 | Satzlängenkonflikt: |
05 | OPEN-Anweisung auf eine nicht vorhandene OPTIONAL-Datei |
Erfolglose Ausführung: Endebedingung | |
10 | Es wurde versucht, ein sequenzielles READ auszuführen. Es war jedoch kein nächster logischer Datensatz vorhanden, da das Dateiende erreicht war. |
Erfolglose Ausführung: Schlüsselfehlerbedingung | |
21 | Reihenfolgefehler für eine Datei bei ACCESS MODE IS SEQUENTIAL:
|
22 | Doppelter Schlüssel |
23 | Datensatz nicht gefunden |
24 | Überschreiten der Bereichsgrenzen |
Erfolglose Ausführung: Permanenter Fehler | |
30 | Es ist keine weitere Information bezüglich der Ein-/Ausgabe-Operation verfügbar (der DVS-Code liefert weitere Informationen). |
35 | Es wurde versucht, eine OPEN INPUT, I-O- oder EXTEND-Anweisung für eine nicht optionale Datei auszuführen, die nicht vorhanden war. |
37 | OPEN-Anweisung auf eine Datei, die wegen folgender Bedingungen nicht eröffnet werden kann:
|
38 | Es wurde versucht, eine OPEN-Anweisung für eine Datei auszuführen, die vorher mit der LOCK-Angabe geschlossen wurde. |
39 | Die OPEN-Anweisung war aus einem der folgenden Gründe erfolglos:
|
Erfolglose Ausführung: Logischer Fehler | |
41 | Es wurde versucht, eine OPEN-Anweisung für eine Datei auszuführen, die bereits eröffnet ist. |
42 | Es wurde versucht, eine CLOSE-Anweisung für eine Datei auszuführen, die nicht eröffnet ist. |
43 | Bei ACCESS MODE IS SEQUENTIAL: |
44 | Überschreiten der Satzlängengrenzen: |
46 | Es wurde versucht, ein sequenzielles READ für eine Datei auszuführen, die sich im Eröffnungsmodus INPUT oder I-O befindet; ein nächster gültiger Datensatz steht aber nicht zur Verfügung. Grund:
|
47 | Es wurde versucht, eine READ- oder START-Anweisung für eine Datei auszuführen, die sich nicht im Eröffnungsmodus INPUT oder I-O befindet. |
48 | Es wurde versucht, eine WRITE-Anweisung für eine Datei auszuführen, die sich
|
49 | Es wurde versucht, eine DELETE- oder REWRITE-Anweisung für eine Datei auszuführen, die sich nicht im Eröffnungsmodus I-O befindet. |
Sonstige erfolglose Ausführungen | |
90 | Systemfehler; es ist keine weitere Information über die Ursache vorhanden. |
91 | OPEN-Fehler; die eigentliche Ursache ist aus dem DVS-Code ersichtlich (siehe „FILE-STATUS-Klausel“ mit Angabe von datenname-2). |
93 | Nur bei Simultanverarbeitung (siehe Abschnitt „Simultanverarbeitung von Dateien (SHARED-UPDATE)"): |
94 |
|
95 | Unverträglichkeit zwischen den Angaben im BLOCK-CONTROL-INFO- oder BUFFER-LENGTH-Operanden des ADD-FILE-LINK-Kommandos und dem Dateiformat, der Blockgröße oder dem Format des verwendeten Datenträgers |
96 | READ PREVIOUS wird nicht unterstützt für Module, die mit COBRUN ENABLE-UFS-ACCESS=YES übersetzt wurden. |
Tabelle 34: Ein-/Ausgabezustände für indizierte Dateien