Aufzeichnen des Datenbankstatus

Wenn beim Zugriff auf eine externe Datenbank ein Fehler auftritt, stehen Ihnen zwei Optionen zur Verfügung:

Die erste Option ist die Standardmethode, d. h., die ESQL-Verarbeitung im aktuellen Knoten wird beendet. Die Ausnahme wird anschließend im Nachrichtenfluss zurückgeschickt, bis ein einschließender Abfangknoten oder der Empfangsknoten für diesen Nachrichtenfluss erreicht wird. Wenn die Ausnahme den Empfangsknoten erreicht, wird die vollständige Transaktion rückgängig gemacht.

Die zweite Option erfordert ein Verständnis von Datenbankrückkehrcodes und eine logische Vorgehensweise im Falle eines Fehlers. Um diese integrierte Datenbankfehlerverarbeitung zu aktivieren, müssen Sie das Merkmal Ausnahme für Datenbankfehler ausgeben des Filter-, Datenbank- oder Rechenknotens löschen. Der Knoten setzt daraufhin die Datenbankstatusanzeiger SQLCODE, SQLSTATE, SQLNATIVEERROR und SQLERRORTEXT entsprechend den Informationen vom Datenbankmanager, anstatt eine Ausnahme auszugeben.

Die Anzeiger enthalten nur dann Informationen, wenn ein Fehler (keine Warnung) auftritt, außer wenn Sie das Merkmal Warnungen als Fehler behandeln ausgewählt haben. Nach erfolgreichen Informationsdatenbankoperationen enthalten die Anzeiger die Standardwerte für eine erfolgreiche Ausführung.

Sie können die Werte in diesen Anzeigern in ESQL-Anweisungen verwenden, um Entscheidungen über die nächste Aktion zu treffen. Der Zugriff auf die Anzeiger erfolgt über die Funktionen SQLCODE, SQLSTATE, SQLNATIVEERROR und SQLERRORTEXT.

Wenn Sie mit einer internen Fehlerverarbeitung arbeiten möchten, müssen Sie die Statusanzeiger nach jeder Ausführung einer Datenbankanweisung überprüfen, um sicherzustellen, dass alle Fehler abgefangen und ausgewertet werden. Finden Sie bei der Verarbeitung der Anzeiger einen Fehler, den Sie nicht intern beheben können, können Sie eine neue Ausnahme auslösen, entweder um sie in einem übergeordneten Abfangknoten zu bearbeiten oder sie an den Empfangsknoten durchzulassen, damit die Transaktion rückgängig gemacht werden kann. Verwenden Sie dazu die ESQL-Anweisung THROW.

Möglicherweise wollen Sie den Sonderfall überprüfen, dass eine SELECT-Anweisung keine Daten zurückgibt. Dies wird nicht als Fehler betrachtet, und SQLCODE wird nicht gesetzt. Deshalb müssen Sie diesen Fall explizit testen. Eine Beschreibung finden Sie unter Von SELECT zurückgegebene Werte überprüfen.

Verwenden von ESQL für den Zugriff auf Datenbankstatusanzeiger

Das folgende ESQL-Beispiel zeigt, wie die vier Datenbankstatusfunktionen verwendet und die in einer Ausnahme zurückgegebenen Fehlerinformationen darin einbezogen werden:

DECLARE SQLState1 CHARACTER;   
DECLARE SQLErrorText1 CHARACTER;
DECLARE SQLCode1 INTEGER;
DECLARE SQLNativeError1 INTEGER;
  
-- Datenbankeintrag in eine nicht vorhandene Tabelle --
INSERT INTO Database.DB2ADMIN.NONEXISTENTTABLE (KEY,QMGR,QNAME) 
                              VALUES (45,'REG356','my TESTING 2');

-- Abrufen des Datenbankrückkehrcodes --
SET SQLState1 = SQLSTATE;
SET SQLCode1 = SQLCODE;
SET SQLErrorText1 = SQLERRORTEXT;
SET SQLNativeError1 = SQLNATIVEERROR;

-- Zurücksetzen der Datenbank und Ausgeben einer Benutzerausnahme mit der THROW-Anweisung--
THROW USER EXCEPTION MESSAGE 2950 VALUES
( 'The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 , 
SQLErrorText1 );

Sie müssen keine Ausnahme auslösen, wenn Sie einen Datenbankfehler erkennen. Es kann sinnvoller sein, die zurückgegebenen Fehlerinformationen in der Verzeichnisstruktur der lokalen Umgebung (LocalEnvironment) zu speichern und einen Filterknoten in den Nachrichtenfluss einzufügen, der die Nachricht abhängig von den gespeicherten Werten an untergeordnete Nachrichtenflüsse für fehlerhafte oder erfolgreiche Vorgänge weiterleitet.

Das Musterprogramm Airline stellt ein weiteres ESQL-Beispiel zur Verfügung, das diese Datenbankfunktionen verwendet.

Zugehörige Konzepte
Nachrichtenflüsse - Übersicht
Ausnahmeliste-Baumstruktur
Übersicht zu ESQL
Nachrichten modellieren
ESQL für die Fehlerbehandlung codieren
Zugehörige Tasks
Nachrichtenfluss entwerfen
Nachrichtenflussinhalt definieren
Fehler in Nachrichtenflüssen behandeln
ESQL-Dateien verwalten
Von SELECT zurückgegebene Werte überprüfen
Zugehörige Verweise
Rechenknoten
Datenbankknoten
Filterknoten
ESQL-Referenz
ESQL-Datenbankstatusfunktionen
DECLARE-Anweisung
DECLARE HANDLER-Anweisung
INSERT-Anweisung
SET-Anweisung
THROW-Anweisung
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2005 Letzte Aktualisierung: Nov 17, 2005
ak05840_