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:
|
| 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
- 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
- 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.
- 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
- 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
- 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.
- 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
- 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
- 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
- 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.