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 auch 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 data-name-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 Handbuch [4] ent-nommen werden.
Ein-/Ausgabe-Zustand | Bedeutung |
Erfolgreiche Ausführung | |
00 | Die Ein-/Ausgabe-Anweisung wurde erfolgreich ausgeführt. |
04 | Satzlängenkonflikt: Eine READ-Anweisung wurde erfolgreich ausgeführt. Die Länge des gelesenen Datensatzesliegt jedoch nicht in den Grenzen, die durch die Satzbeschreibungen der Datei festgelegt wurden. |
05 | Erfolgreicher OPEN INPUT/I-O/EXTEND auf eine Datei mit OPTIONAL-Angabe in der SELECT-Klausel, die zum Zeitpunkt der Ausführung der OPEN-Anweisung nicht vorhanden war |
Erfolglose Ausführung: Endebedingung | |
10 | Es wurde versucht, eine READ-Anweisung auszuführen. Es war jedoch kein nächster logischer Datensatz vorhanden, da das Dateiende erreicht war (sequenzielles READ). |
14 | Es wurde versucht, eine READ-Anweisung auszuführen. Das durch RELATIVE KEY beschriebene Datenfeld ist aber zu klein, um die relative Satznummer aufzunehmen (sequenzielles READ). |
Erfolglose Ausführung: Schlüsselfehlerbedingung | |
22 | Doppelter Schlüssel |
23 | Datensatz nicht gefunden oder Satzschlüssel Null |
24 | Überschreiten der Bereichsgrenzen Es wurde versucht, eine WRITE-Anweisung außerhalb der vom System festgelegten Bereichsgrenzen einer relativen Datei auszuführen (unzureichende Sekundärzuweisung im FILE-Kommando) oder eine WRITE-Anweisung im sequenziellen Zugriffsmodus zu geben, bei der die relative Satznummer so groß ist, dass sie nicht in das mit der RELATIVE KEY-Angabe beschriebene Datenfeld passt. |
Erfolglose Ausführung: Permanenter Fehler | |
30 | Es ist keine weitere Information bezüglich der Ein-/Ausgabe-Operation verfügbar. |
35 | Es wurde versucht, eine OPEN INPUT/I-O-Anweisung für eine Datei auszuführen, die nicht vorhanden ist. |
37 | OPEN-Anweisung auf eine Datei, die auf Grund 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 Dateiauszufü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, eine sequenzielle READ-Anweisung 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 | Systemfehler; OPEN-Fehler |
93 | Nur bei Simultanverarbeitung |
94 | Nur bei Simultanverarbeitung |
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 kompiliert wurden, oder die Datei soll mit der DVS-Zugriffsart UPAM bearbeitet werden. |
Tabelle 29: Ein-/Ausgabezustände für relative Dateien