SQLSTATE-Funktion

SQLSTATE ist eine Datenbankfunktion, die einen CHARACTER-Datentyp bestehend aus 5 Zeichen mit einem Standardwert '00000' (Zeichenfolge mit fünf Nullen) zurückgibt.

SYNTAX

In einem Nachrichtenfluss können Sie auf eine externe Datenbankressource zugreifen und sie aktualisieren, indem Sie die verfügbaren ESQL-Datenbankfunktionen in den Filter-, Datenbank- und Rechenknoten verwenden. Bei Aufrufen an eine externe Datenbank erhalten Sie möglicherweise Fehler, z. B. dass eine Tabelle nisht existert, eine Datenbank nicht verfügbar ist oder einen Einsatz für einen bereits vorhandenen Schlüssel.

Bei diesen Fehlern besteht die Standardaktion des Brokers darin, eine Ausnahmebedingung zu generieren. Dieses Verhalten wird davon bestimmt, wie Sie die Eigenschaft Ausnahme für Datenbankfehler ausgeben festgelegt haben. Ist dieses Markierungsfeld ausgewählt, hört der Broker mit der Verarbeitung des Knotens auf, gibt die Nachricht an das Fehlerterminal des Knotens weiter und schreibt die Fehlerdetails in die Ausnahmeliste. Wenn Sie das Standardverhalten aufheben und einen Datenbankfehler in ESQL im Knoten handhaben möchten, heben Sie die Auswahl des Markierungsfelds Ausnahme für Datenbankfehler ausgeben auf. Der Broker gibt keine Ausnahmebedingung aus, und Sie müssen die THROW-Anweisung zum Ausgeben einer Ausnahme einschließen, wenn ein bestimmter SQL-Zustandscode nicht erwartet wird. Der Abschnitt THROW-Anweisung enthält eine Beschreibung von THROW.

Wenn Sie Datenbankfehler in einem Knoten handhaben möchten, können Sie mit der Datenbankzustandsfunktion SQLSTATE Informationen zum Status des DBMS-Aufrufs in ESQL empfangen. Sie können sie im ESQL des aktuellen Knotens in bedingten Anweisungen einschließen, um mögliche Fehler zu erkennen und zu handhaben.

SQL-Status

In ESQL handelt es sich bei einem SQL-Status um eine Zeichenfolge variabler Länge. Entsprechend der Konvention bestehen diese Zeichenfolgen aus sechs Zeichen aus dem Bereich 0-9 und A-Z. Diese sechs Zeichen haben die folgende Bedeutung:
Zeichen 1
Der Ursprung der Ausnahme
Zeichen 2-3
Die Klasse der Ausnahme
Zeichen 4-6
Die Unterklasse der Ausnahme

Der SQL-Status einer Ausnahme wird in zwei Schritten bestimmt. In einem ersten Schritt wird die Ausnahmeinformation untersucht; alle umliegenden Ausnahmeinformationen (also Informationen darüber, welche Aktivitäten der Broker zu dem Zeitpunkt ausführte, an dem die Ausnahme auftrat) werden übersprungen, bis die Ausnahme ermittelt wird, die den ursprünglichen Fehler beschreibt.

In einem zweiten Schritt geschieht Folgendes:
  1. Handelt es sich bei der Ausnahme um eine Datenbankausnahmebedingung, wird als SQL-Status der von der Datenbank übergebene Status übernommen, allerdings wird ihm der Buchstabe "D" vorangestellt, um Verwechslungen mit brokerspezifischen Ausnahmen zu vermeiden. Als SQL-Code, nativer Fehler und Fehlertext werden die von der Datenbank übergebenen Informationen übernommen.
  2. Handelt es sich bei der ausgewählten Ausnahme um eine Benutzerausnahme (hat sie ihren Ursprung also in einer THROW-Anweisung), werden SQL-Code, SQL-Status, nativer Fehler und Fehlertext aus den ersten vier Einträgen der Ausnahme übernommen, und zwar in dieser Reihenfolge. Der Statuswert, der sich daraus ergibt, wird so übernommen, wie er ist, d. h. ihm wird kein Buchstabe wie beispielsweise "U" vorangestellt. Der Buchstabe "U" wird vom Broker auch nicht als Hinweis auf den Ursprung der Ausnahme gesehen. Wenn Sie also einen eindeutigen SQL-Status definieren und keinen bereits vorhandenen Status imitieren möchten, sollten Sie einen SQL-Status verwenden, dem der Buchstabe "U" vorangestellt ist. Die Verwendung eines SQL-Status, der mit "U" beginnt, ermöglicht, dass ein Handler alle benutzerdefinierten und ausgegebenen Ausnahmebedingungen mit dem Operator LIKE’U%’ abgleicht.
  3. Wenn der Ursprung der ausgewählten Ausnahme in der Nachrichtenübertragung oder in der ESQL-Implementierung selbst liegt, werden SQL-Code, Status, nativer Fehler und Fehlertext wie in der Liste unten beschrieben übernommen.
  4. Für alle anderen Ausnahmen ist der SQL-Status '', d. h. es werden kein Ursprung, keine Klasse und keine Unterklasse angegeben.

Einigen Ausnahmen, die momentan einen leeren SQL-Status übergeben, wird unter Umständen in späteren Versionen ein eigener Status zugewiesen. Sollen nicht klassifizierte Ausnahmen abgefangen werden, sollten Sie in der letzten Steuerroutine eines Bereichs das Platzhalterzeichen für "alle" ("%") für den SQL-Status angeben. Dadurch werden nach wie vor dieselben Ausnahmen abgefangen, falls zuvor nicht klassifizierten Ausnahmen ein eindeutiger SQL-Status zugewiesen wurde.

Die folgenden SQL-Stati sind definiert:

Dddddd
ddddd ist der von der Datenbank zurückgegebene Status.
SqlState = ‘S22003'
Arithmetischer Überlauf. Eine Operation, bei deren Ergebnis es sich um einen numerischen Typ handelt, hat als Ergebnis einen Wert außerhalb des unterstützten Bereichs ergeben.
SqlState = ‘S22004’
Nullwert nicht zulässig. Ein Nullwert stand an einer Stelle, an der kein Nullwert zulässig ist.
SqlState = ‘S22007’
Ungültiges Datums-/Zeitformat. Eine Zeichenfolge, die für eine Umwandlung vom Zeichenformat hin zum Datums-/Zeitformat verwendet wurde, hatte entweder das falsche Ausgangsformat (Beispiel: '01947-10-24') oder enthielt Werte außerhalb des für den gregorianischen Kalender zulässigen Bereichs (Beispiel: '1947-21-24').
SqlState = ‘S22008’
Überlauf des Datums-/Zeitfeldes. Eine Operation, bei deren Ergebnis es sich um einen Datums-/Zeittyp handelt, hat als Ergebnis einen Wert außerhalb des unterstützten Bereichs ergeben.
SqlState = ‘S22011’
SUBSTRING-Fehler. Die FROM- und FOR-Parameter verletzen in Zusammenhang mit der Länge des ersten Operanden die für die SUBSTRING-Funktion geltenden Regeln.
SqlState = ‘S22012’
Division durch null. Eine Division, deren Ergebnisdatentyp über kein Konzept für Unendlichkeit verfügt, hatte einen Null-Operanden auf der rechten Seite.
SqlState = ‘S22015’
Interner Feldüberlauf. Eine Operation, bei deren Ergebnis es sich um den Typ INTERVAL handelt, hat als Ergebnis einen Wert außerhalb des für den Datentyp INTERVAL unterstützten Bereichs ergeben.
SqlState = ‘S22018’
Ungültiger Zeichenwert für Umsetzung.
SqlState = ‘SPS001’
Ungültiges Zielterminal. In einer PROPAGATE-Anweisung an ein Terminal wurde ein ungültiger Terminalname verwendet.
SqlState = ‘SPS002’
Ungültige Zielbezeichnung. In einer PROPAGATE-Anweisung an eine Zielbezeichnung wurde eine ungültige Bezeichnung verwendet.
SqlState = 'MQW001', SqlNativeError = 0
Der Bitstrom erfüllt nicht die Voraussetzungen für MQ-Nachrichten. Es wurde kein Versuch unternommen, ihn in eine Warteschlange einzureihen. Das Problem kann durch eine Wiederholung des Vorgangs und den Versuch, den Bitstrom erneut einzureihen, nicht gelöst werden.
SqlState = 'MQW002', SqlNativeError = 0
Der Name der Zielwarteschlange oder des Ziel-WS-Managers war ungültig (d. h. er konnte nicht von Unicode in den Zeichensatz der Codepage des WS-Managers umgewandelt werden). Das Problem kann durch eine Wiederholung des Vorgangs und den Versuch, die Warteschlange zu leeren, nicht gelöst werden.
SqlState = 'MQW003', SqlNativeError = 0
Der Anforderungsmodus war angegeben, aber der Name der Warteschlange für Antwortnachrichten oder des WS-Managers war ungültig (d. h. er konnte nicht von Unicode in den Zeichensatz der Codepage des WS-Managers umgewandelt werden). Das Problem kann durch eine Wiederholung des Vorgangs und den Versuch, die Warteschlange zu leeren, nicht gelöst werden.
SqlState = 'MQW004', SqlNativeError = 0
Der Antwortmodus war angegeben, aber der aus der Nachricht abgerufene Name der Warteschlange oder des WS-Managers war ungültig (d. h. er konnte nicht von Unicode in den Zeichensatz der Codepage des WS-Manager umgewandelt werden). Das Problem kann durch eine Wiederholung des Vorgangs und den Versuch, die Warteschlange zu leeren, nicht gelöst werden.
SqlState = 'MQW005', SqlNativeError = 0
Der Ziellistenmodus war angegeben, aber die übergebene Zielliste erfüllt nicht die für Ziellisten geltenden Grundbedingungen. Es wurde kein Versuch unternommen, eine Nachricht in eine Warteschlange einzuordnen. Das Problem kann durch eine Wiederholung des Vorgangs und den Versuch, den Bitstrom erneut einzureihen, nicht gelöst werden.
SqlState = 'MQW101', SqlNativeError = wie von MQ zurückgegeben
Der Ziel-WS-Manager oder die Zielwarteschlange konnte nicht geöffnet werden. Dieses Problem kann unter Umständen über administrative Operationen für die Warteschlange gelöst werden, nicht aber durch eine Wiederholung des Vorgangs.
SqlState = 'MQW102', SqlNativeError = wie von MQ zurückgegeben
Es waren keine Schreibzugriffe auf den Ziel-WS-Manager oder die Warteschlange möglich. Das Problem kann unter Umständen durch administrative Operationen für die Warteschlange und eine Wiederholung des Vorgangs gelöst werden.
SqlState = 'MQW201', SqlNativeError = Anzahl der fehlerbehafteten Ziele
Bei der Verarbeitung einer Zielliste sind mehrere Fehler aufgetreten. Die Nachricht wurde unter Umständen in keine oder mehrere Warteschlangen eingereiht. Das Problem kann unter Umständen durch administrative Operationen für die Warteschlange und eine Wiederholung des Vorgangs gelöst werden.
Alles, was der Benutzer in einer THROW-Anweisung verwendet hat.
Verwenden Sie Uuuuuuu für Benutzerausnahmen, sofern keine der oben aufgeführten Ausnahmen imitiert werden soll.
Leere Zeichenfolge
Alle anderen Fehler.
Zugehörige Konzepte
Nachrichtenflüsse - Übersicht
Übersicht zu ESQL
Zugehörige Tasks
Nachrichtenflussinhalte definieren
ESQL erstellen
Datenbankstatus erfassen
Zugehörige Verweise
SQLCODE-Funktion
SQLERRORTEXT-Funktion
SQLNATIVEERROR-Funktion
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ak17990_