E/A-Fehlerwerte

Die nachstehende Tabelle enthält eine Beschreibung der EGL-Fehlerwerte für Ein-/Ausgabe-Operationen, die sich auf Datenbanken, Dateien und WebSphere MQ-Nachrichtenwarteschlangen auswirken. Wenn Sie die Funktion für Ausnahmebedingungskompatibilität mit Version 6 verwenden (siehe V6-Ausnahmebedingungskompatibilität verwenden) haben Sie Zugriff auf permanente sowie sporadisch auftretende E/A-Fehler (siehe is/not (Operator)). Weitere Informationen hierzu finden Sie im Abschnitt Ausnahmebedingungsbehandlung.

Fehlerwert Fehlertyp Datensatztyp Bedeutung des Fehlerwerts
deadlock Permanent SQL Zwei Programminstanzen versuchen, einen Datensatz zu ändern. Diese Änderung kann jedoch von keiner der Instanzen ohne Systemintervention ausgeführt werden. Beim Zugriff auf eine SQL-Tabelle in DB2 gibt 'deadlock' an, dass der SQLCODE-Wert -911 ist.
duplicate Sporadisch DL/I, indexiert oder relativ Weitere Informationen hierzu finden Sie unter 'duplicate' in diesem Thema.
endOfFile Sporadisch DL/I, indexiert, relativ oder seriell Weitere Informationen hierzu finden Sie unter 'endOfFile' in diesem Thema.
ioError Permanent oder sporadisch Beliebig Weitere Informationen hierzu finden Sie unter 'ioError' in diesem Thema.
fileNotAvailable Permanent Indexiert, relativ oder seriell 'fileNotAvailable' ist bei allen E/A-Operationen möglich und kann beispielsweise darauf hinweisen, dass die Datei von einem anderen Programm verwendet wird oder dass erforderliche Ressourcen für den Zugriff auf die Datei knapp sind.
fileNotFound Permanent Indexiert, Nachrichtenwarteschlange, relativ oder seriell 'fileNotFound' ist bei allen E/A-Operationen möglich und weist darauf hin, dass eine angeforderte Datei nicht gefunden wurde.
full Permanent Indexiert, relativ oder seriell 'full' wird in folgenden Fällen gesetzt:
  • Eine indexierte oder serielle Datei ist voll.
  • Eine indexierte oder relative Datei ist als CICS-Warteschlange für temporären Speicher implementiert und eine Anweisung vom Typ 'add' versucht, einen Schlüssel mit mehr als 32767 Byte einzufügen.
hardIOError Permanent Beliebig Weitere Informationen hierzu finden Sie unter 'hardIOError' in diesem Thema.
invalidFormat Permanent Indexiert, relativ oder seriell Die Datei, auf die zugegriffen wird, ist nicht mit der Datensatzdefinition kompatibel. Weitere Informationen hierzu finden Sie unter 'invalidFormat' in diesem Thema.
noRecordFound Sporadisch Beliebig Weitere Informationen hierzu finden Sie unter 'noRecordFound' in diesem Thema.
softIOError Sporadisch Beliebig Ein sporadisch auftretender Fehler wurde festgestellt. Hierbei handelt es sich um 'endOfFile', 'noRecordFound' oder 'duplicate'.
unique Permanent DL/I, indexiert, relativ oder SQL Der Code versuchte, einen Datensatz mit einem bereits vorhandenen Schlüssel hinzuzufügen oder zu ersetzen, und dieser Versuch ist fehlgeschlagen. Weitere Informationen hierzu finden Sie unter 'unique' in diesem Thema.

duplicate

Für einen indexierten oder relativen Datensatz wird 'duplicate' in folgenden Fällen gesetzt:
  • Eine Anweisung vom Typ 'add' hat versucht, einen Datensatz einzufügen, dessen Schlüssel bereits in der Datei oder in einem alternativen Index vorhanden ist, und diese Einfügung war erfolgreich.
  • Eine Anweisung vom Typ 'replace' hat einen Datensatz erfolgreich überschrieben, und zu den Ersetzungswerten gehört ein Schlüssel, der mit einem Alternativindexschlüssel in einem anderen Datensatz identisch ist.
  • Eine Anweisung vom Typ 'get', 'get next' oder 'get previous' hat einen Datensatz erfolgreich gelesen, und ein zweiter Datensatz hat denselben Schlüssel.

Die Einstellung 'duplicate' wird nur dann zurückgegeben, wenn die Zugriffsmethode die Information zurückgibt. Dies ist nicht bei allen Betriebssystemen der Fall. Beim SQL-Datenbankzugriff ist die Option nicht verfügbar.

Wenn Sie über ein von EGL generiertes COBOL-Programm unter iSeries auf eine emulierte VSAM-Datei zugreifen, lesen Sie die Informationen im Thema 'Zuordnungselemente' im Handbuch für EGL-Generierung. Dort finden Sie eine Beschreibung der Eigenschaft 'duplicates' im Ressourcenzuordnungsabschnitt, der zur Generierungszeit verwendet wird.

Bei DL/I-Datenbanken ist 'duplicate' ein sporadisch auftretender Fehler, der gesetzt wird, wenn eine Anweisung vom Typ 'add' versucht, ein Segment in eine Datenbank einzufügen, in der Datensätze mit doppelten Schlüsseln nicht zulässig sind und ein Datensatz mit demselben Schlüssel bereits vorhanden ist. Die Anweisung 'add' ist fehlgeschlagen. Der entsprechende Statuscode ist II. Die Werte 'duplicate' und 'unique' sind für DL/I äquivalent.

endOfFile

Für einen seriellen oder relativen Datensatz wird 'endOfFile' in folgenden Fällen gesetzt:
  • Der Code setzt eine Anweisung vom Typ 'get next' für einen seriellen oder relativen Datensatz ab, wenn sich der zugehörige Dateizeiger am Ende der Datei befindet. Der Zeiger ist am Ende der Datei, wenn eine vorherige Anweisung vom Typ 'get' oder 'get next' auf den letzten Datensatz in der Datei zugegriffen hat.
  • Der Code setzt eine Anweisung vom Typ 'get next' für einen seriellen Datensatz ab, der als GSAM-Datei implementiert ist, und in der Datenbank sind keine weiteren Segmente vorhanden. Der entsprechende Statuscode ist GB.
  • Der Code setzt eine Anweisung vom Typ 'get next' für einen seriellen Datensatz ab, der als IMS-Nachrichtenwarteschlange implementiert ist, und in der Nachrichtenwarteschlange sind keine weiteren Nachrichten vorhanden. Der entsprechende Statuscode ist QC.
Für einen seriellen oder relativen Datensatz wird 'endOfFile' in folgenden Fällen gesetzt:
  • Der Code setzt eine Anweisung vom Typ 'get next' ab, wenn sich der zugehörige Dateizeiger am Ende der Datei befindet, was in folgenden Situationen vorkommt:
    • Eine vorherige Anweisung vom Typ 'get' oder 'get next' hat auf den letzten Datensatz in der Datei zugegriffen.
    • Eine vorherige set-Anweisung vom Typ 'set record position' hat auf den letzten Datensatz in der Datei zugegriffen, wobei eine der folgenden Bedingungen zutraf:
      • Der Schlüsselwert stimmte mit dem Schlüssel des letzten Datensatzes in der Datei überein.
      • Alle Byte im Schlüsselwert waren auf hexadezimal FF gesetzt. (Wenn eine set-Anweisung des Typs set record position mit einem Schlüsselwert ausgeführt wird, bei dem alle Byte auf hexadezimal FF gesetzt sind, stellt die Anweisung den Positionszeiger an das Ende der Datei.)
  • Der Code setzt eine Anweisung vom Typ 'get previous' ab, wenn sich der zugehörige Dateizeiger am Anfang der Datei befindet, was in folgenden Situationen vorkommt:
    • Eine vorherige Anweisung vom Typ 'get' oder 'get previous' hat auf den ersten Datensatz in der Datei zugegriffen.
    • Der Code hat bisher noch nicht auf diese Datei zugegriffen.
    • Eine set-Anweisung des Typs 'set record position' wurde mit einem Schlüssel ausgeführt, zu dem es in der Datei keinen Vorgängerschlüssel gibt.
  • Eine Anweisung vom Typ 'get next' versucht, Daten aus einer leeren oder nicht initialisierten Datei abzurufen. (Eine leere Datei ist eine Datei, aus der alle zuvor vorhandenen Datensätze gelöscht worden sind. Eine nicht initialisierte Datei ist eine Datei, zu der bisher noch nie Datensätze hinzugefügt worden sind.)
  • Eine Anweisung vom Typ 'get previous' versucht, Daten aus einer leeren Datei abzurufen.
  • Im Zusammenhang mit der COBOL-Generierung versucht eine Anweisung vom Typ 'get previous', Daten aus einer nicht initialisierten Datei abzurufen.

Bei einer DL/I-Datenbank wird 'endOfFile' gesetzt, wenn eine Anweisung vom Typ 'get next' oder 'get next inParent' versucht, Daten abzurufen und sich der zugehörige Datenbankzeiger am Ende der Datenbank befindet. Der entsprechende Statuscode ist GB.

ioError

Dieser Wert wird in folgenden Fällen gesetzt:
  • Für eine serielle, indexierte oder relative Datei wurde ein Rückgabecode ungleich null von einer E/A-Operation empfangen.
  • Für eine serielle Datei, die als GSAM-Datei implementiert ist, hat DL/I einen Statuscode ungleich null zurückgegeben.
  • Für eine serielle Datei, die als IMS-Nachrichtenwarteschlange implementiert ist, hat DL/I einen Statuscode ungleich null zurückgegeben.
  • Für eine DL/I-Datenbank hat DL/I einen CICS-DL/I-Fehlercode ungleich null oder einen DL/I-Statuscode ungleich null zurückgegeben.
  • Bei Verwendung von DB2 für einen SQL-Zeilensatz hatte SQLCODE einen anderen Wert als 0.

hardIOError

Ein permanenter E/A-Fehler resultiert aus einer fehlgeschlagenen E/A-Operation. Die Werte 'endOfFile' und 'noRecordFound' gelten nie als permanente Fehler. Um einen Test auf permanente E/A-Fehler ausführen zu können, müssen Sie sich im V6-Ausnahmemodus befinden.
  • Für andere Operationen als DL/I-Operationen muss die Systemvariable 'vgVar.handleHardIOErrors' auf 1 gesetzt sein.
  • Für DL/I-E/A-Operationen muss eine der folgenden Bedingungen zutreffen:
    • 'vgVar.handleHardIOErrors' ist auf 1 gesetzt.
    • 'dliVar.handleHardDLIErrors' ist auf 1 gesetzt.
'hardIOError' wird in folgenden Fällen gesetzt:
  • Für eine serielle, indexierte oder relative Datei trat ein Datei-E/A-Fehler auf, bei dem es sich nicht um einen Fehler handelt, der als sporadisch auftretender Fehler definiert ist. Für sporadisch auftretende Fehler wird 'duplicate', 'endOfFile', 'noRecordFound' oder 'unique' gesetzt.
  • Für eine serielle Datei, die als GSAM-Datei implementiert ist, hat DL/I einen Statuscode ungleich null, aber nicht GB zurückgegeben.
  • Für eine serielle Datei, die als IMS-Nachrichtenwarteschlange implementiert ist, hat DL/I einen Statuscode ungleich null zurückgegeben, aber nicht QC, QD, CE, CF, CG, CI, CJ, CK oder CL.
  • Für eine DL/I-Datenbank hat DL/I einen CICS-DL/I-Fehlercode ungleich null oder einen DL/I-Statuscode ungleich null zurückgegeben, aber nicht GA, GB, GD, GE, GK oder II.
  • Bei Verwendung von DB2 für einen SQL-Zeilensatz hat SQLCODE den Wert 304, 802 oder einen Wert kleiner als 0.

invalidFormat

'invalidFormat' kann aus einer beliebigen E/A-Operation resultieren und wird möglicherweise unter anderem in folgenden Fällen gesetzt:
  • Datensatzformat

    Das Dateiformat (feste oder variable Länge) stimmt nicht mit dem EGL-Datensatzformat überein.

  • Datensatzlänge

    Bei Datensätzen fester Länge weicht die Länge eines Datensatzes in der Datei von der Länge des EGL-Datensatzes ab. Bei Datensätzen variabler Länge ist ein Datensatz in der Datei länger als der EGL-Datensatz.

  • Dateityp

    Der für den Datensatz angegebene Dateityp stimmt nicht mit dem Dateityp zur Ausführungszeit überein.

  • Schlüssellänge

    Die Schlüssellänge in der Datei weicht von der Schlüssellänge im indexierten EGL-Datensatz ab.

  • Schlüsselversatz

    Die Schlüsselposition in der Datei weicht von der Schlüsselposition im indexierten EGL-Datensatz ab.

noRecordFound

'noRecordFound' wird in folgenden Fällen gesetzt:
  • Bei einem indexierten Datensatz: Es wurde kein Datensatz gefunden, der zu dem in einer Anweisung vom Typ 'get' angegebenen Schlüssel passt. Alternativ dazu hat in CICS eine Anweisung vom Typ 'get next' oder 'get previous' versucht, Daten aus einer leeren VSAM-Datei abzurufen und in einen indexierten Datensatz zu stellen.
  • Bei mit EGL generiertem Java™-Code: Der Code setzt für einen indexierten Datensatz eine Anweisung vom Typ 'get next' oder 'get previous' ab, und die VSAM-Datei ist leer oder nicht initialisiert.
  • Bei einem relativen Datensatz: Es wurde kein Datensatz gefunden, der zu der in einer Anweisung vom Typ 'get' angegebenen Datensatz-ID passt. Alternativ dazu versucht eine Anweisung vom Typ 'get next', auf einen Datensatz zuzugreifen, der sich jenseits des Dateiendes befindet.
  • Bei einem SQL-Datensatz: Es wurde keine Zeile gefunden, die zur angegebenen Anweisung SELECT passt, oder es wurde eine Anweisung vom Typ 'get next' abgesetzt, obwohl keine weiteren zu prüfenden Zeilen ausgewählt sind.
  • Bei einer DL/I-Datenbank: Es wurde in der Datenbank kein Datensatz gefunden, der die im DL/I-Aufruf angegebenen Auswahlbedingungen erfüllt. Dieser Status kann für eine EGL-Anweisung vom Typ 'add' gesetzt werden, wenn das übergeordnete Segment eines Segments, das eingefügt werden soll, nicht gefunden wird. Der Statuscode ist GE.

unique

Für einen indexierten oder relativen Datensatz wird 'unique' in folgenden Fällen gesetzt:
  • Eine Anweisung vom Typ 'add' hat versucht, einen Datensatz einzufügen, dessen Schlüssel oder Datensatz-ID bereits in der Datei oder in einem Alternativindex enthalten ist. Der Versuch ist wegen der Duplizierung fehlgeschlagen.
  • Eine Anweisung vom Typ 'replace' kann einen Datensatz nicht überschreiben, weil zu den Ersetzungswerten ein Schlüssel gehört, der mit dem Alternativindexschlüssel eines anderen Datensatzes identisch ist.

Die Einstellung 'unique' wird nur dann zurückgegeben, wenn die Zugriffsmethode die Information zurückgibt. Dies ist nicht bei allen Betriebssystemen der Fall.

Beim SQL-Datenbankzugriff wird 'unique' gesetzt, wenn eine hinzuzufügende oder zu ersetzende SQL-Zeile einen Schlüssel enthält, der bereits in einem eindeutigen Index vorhanden ist. Der entsprechende SQLCODE-Wert ist -803.

Bei DL/I-Datenbanken wird 'unique' gesetzt, wenn eine Anweisung vom Typ 'add' versucht, ein Segment in eine Datenbank einzufügen, in der Datensätze mit doppelten Schlüsseln nicht zulässig sind und ein Datensatz mit demselben Schlüssel bereits vorhanden ist. Die Anweisung 'add' ist fehlgeschlagen. Der entsprechende Statuscode ist II. Die Werte 'duplicate' und 'unique' sind für DL/I äquivalent.


Feedback