Eine Ausnahmesituation kann zur Laufzeit als Abweichung zur normalen Ausführung einer COBOL-Anweisung auftreten.
Um auf eine Ausnahmesituation in einem Programm bzw. einer Methode gezielt reagieren zu können, gibt es neben der Angabe von expliziten Klauseln (z. B. SIZE ERROR-Angabe) und der Abfrage von Ein- und Ausgabezuständen bei der Dateibearbeitung für einige Ausnahmesituationen die Möglichkeit, Ausnahmezustände auszulösen und diese in USE-Prozeduren zu behandeln. Diesen Ausnahmesituationen sind Ausnahmesituationsnamen zugeordnet, durch die sie angesprochen werden können. Eine Aufstellung dieser Namen befindet sich in
Tabelle 45.
Um für eine aufgetretene Ausnahmesituation den zugehörigen Ausnahmezustand auszulösen, muss deren Überprüfung durch die >>TURN-Direktive eingeschaltet sein.
Ist für eine Ausnahmesituation die Überprüfung eingeschaltet, gleichzeitig aber eine Klausel (ohne NOT) angegeben, mit der die Ausnahmesituation behandelt werden kann (z.B. INVOKE ... ON EXCEPTION für EC-OO-NULL), so hat die Klausel Vorrang, d.h. die Ausnahmesituation wird zwar (aufgrund der Klausel) überprüft, der zugehörige Ausnahmezustand wird aber nicht ausgelöst.
Zusätzlich können Ausnahmezustände direkt durch die RAISE-Anweisung ausgelöst werden.
Wird ein Ausnahmezustand ausgelöst, so wird der letzte Ausnahmezustand aktualisiert. Dieser gilt für die gesamte Ablaufeinheit solange, bis ein neuer Ausnahmezustand ausgelöst wird oder die Anweisung SET LAST EXCEPTION TO OFF ausgeführt wird. Der zugehörige Name kann über die Funktion EXCEPTION-STATUS abgefragt werden.
Der weitere Ablauf hängt von der Schwere (Kategorie) der Ausnahmesituation ab. Ausnahmesituationen sind entweder FATAL oder NON-FATAL.
Auslösen einer FATAL Ausnahmesituation
Ist für die Ausnahmesituation eine USE-Prozedur angegeben, so wird diese aktiviert.
Wird das Ende der USE-Prozedur erreicht, ohne dass die USE-Prozedur zuvor explizit verlassen wurde, so wird der Programmablauf abgebrochen.
Ist keine USE-Prozedur angegeben, so wird der Programmablauf abgebrochen.
Auslösen einer NON-FATAL Ausnahmesituation
Ist für die Ausnahmesituation eine USE-Prozedur angegeben, so wird diese aktiviert.
Wird das Ende der USE-Prozedur erreicht, ohne dass die USE-Prozedur zuvor explizit verlassen wurde, so wird der Programmlauf abgebrochen.
Ist keine USE-Prozedur angegeben, so wird der Programmlauf fortgesetzt, als wäre die Überprüfung der Ausnahmesituation nicht eingeschaltet.
Ausnahmesituationsname
Die folgende Tabelle enthält eine Aufstellung der Ausnahmesituationsnamen, die von der aktuellen Compiler-Version unterstützt werden.
Bedeutung der einzelnen Spalten
Name: |
Name der Ausnahmesituationen. |
Kat: |
Kategorie der Ausnahmesituation: Fatal, Non-Fatal (NF). |
Kurzbeschreibung: |
Umstand, unter dem die Ausnahmesituation auftritt |
Klauseln: |
Die Behandlung der Ausnahmesituation ist durch die angegebenen Klauseln möglich. |
Name |
Kat |
Kurzbeschreibung |
Klauseln |
EC-DATA-CONVERSION |
NF |
Ersatzzeichen bei Konvertierung |
- |
EC-OO-CONFORMANCE |
Fatal |
Fehler bei Objektsicht |
- |
EC-OO-METHOD |
Fatal |
Methode nicht gefunden |
ON EXCEPTION |
EC-OO-NULL |
Fatal |
Aufruf einer Methode mit einer NULL-Objektreferenz |
ON EXCEPTION |
EC-OO-RESOURCE |
Fatal |
Nicht genügend Speicherplatz verfügbar, um ein Objekt zu erzeugen |
- |
EC-OO-UNIVERSAL |
Fatal |
Konformitätsregeln bei Methodenaufruf über universelle Objektreferenz sind nicht erfüllt |
ON EXCEPTION |
EC-STORAGE-NOT-ALLOC |
NF |
Zeiger in der FREE-Anweisung zeigt nicht auf einen durch ALLOCATE zugewiesenen Speicherbereich |
- |
EC-STORAGE-NOT-AVAIL |
NF |
Der in einer ALLOCATE-Anweisung angeforderte Speicherplatz ist nicht verfügbar |
- |
EC-XML-CODESET-CONVERSION |
NF |
Ersatzzeichen bei Konvertierung eines XML-Dokuments |
- |
Tabelle 45: Ausnahmesituationsnamen