Datenbankstatus erfassen

Wenn beim Zugriff auf eine externe Datenbank ein Fehler auftritt, haben Sie zwei Möglichkeiten:

Standardmäßig wird die erste Methode verwendet; die ESQL-Verarbeitung im aktuellen Knoten wird abgebrochen. Die Ausnahmebedingung wird anschließend rückwärts über den Nachrichtenfluss weitergegeben, bis ein umschließender Catch-Knoten oder der Empfangsknoten für diesen Nachrichtenfluss erreicht ist. Wenn die Ausnahmebedingung den Empfangsknoten erreicht, werden alle Transaktionen zurückgesetzt.

Die zweite Methode setzt voraus, dass Sie die Rückkehrcodes der Datenbank kennen und wissen, welche Maßnahmen zu ergreifen sind, wenn ein Fehler auftritt. Um diese integrierte Datenbankfehlerverarbeitung zu aktivieren, müssen Sie die Eigenschaft Ausnahme für Datenbankfehler ausgeben des Filter-, Datenbank- und Rechenknotens inaktivieren. Der Knoten setzt daraufhin die Datenbankstatusanzeiger SQLCODE, SQLSTATE, SQLNATIVEERROR und SQLERRORTEXT entsprechend den Informationen vom Datenbankmanager, anstatt eine Ausnahme auszugeben.

Wenn Sie die Eigenschaft Warnungen als Fehler behandeln nicht ausgewählt haben, enthalten die Anzeiger nur Informationen, wenn ein Fehler (keine Warnung) auftritt. Bei erfolgreichen Datenbankoperationen enthalten die Anzeiger ihre Standarderfolgswerte.

Mit Hilfe dieser Werte in diesen Anzeigern in ESQL-Anweisungen können Sie entscheiden, welche Maßnahmen zu ergreifen sind. Sie können mit den SQLCODE-, SQLSTATE-, SQLNATIVEERROR- und SQLERRORTEXT-Funktionen auf diese Anzeiger zugreifen.

Wenn Sie es mit der integrierten Fehlerverarbeitung versuchen, müssen Sie die Statusanzeiger nach der Ausführung jeder Datenbankanweisung überprüfen, um sicherzustellen, dass Sie alle Fehler erfassen und beurteilen. Wenn Sie bei der Verarbeitung der Anzeiger einen Fehler finden, den Sie nicht integriert verarbeiten können, können Sie eine neue Ausnahmebedingung ausgeben, um diese entweder in einem vorgeschalteten Catch-Knoten zu verarbeiten oder bis zum Empfangsknoten durchzulassen, so dass die Transaktion zurückgesetzt wird. Dazu können Sie die THROW-Anweisung in ESQL verwenden.

Möglicherweise möchten Sie den Sonderfall überprüfen, in dem SELECT keine Daten zurückgibt. Dieser Fall wird nicht als Fehler betrachtet, und SQLCODE wird nicht festgelegt, so dass Sie dies explizit testen müssen. Diese Task wird im Abschnitt Von SELECT zurückgegebene Werte überprüfen beschrieben.

ESQL für den Zugriff auf Datenbankstatusanzeiger verwenden

Im folgenden ESQL-Beispiel ist dargestellt, wie die vier Datenbankstatusfunktionen verwendet werden und wie die zurückgegebenen Fehlerinformationen in eine Ausnahmebedingung eingefügt werden:

DECLARE SQLState1 CHARACTER;
DECLARE SQLErrorText1 CHARACTER;
DECLARE SQLCode1 INTEGER;
DECLARE SQLNativeError1 INTEGER;
  
-- Make a database insert to a table that does not exist --
INSERT INTO Database.DB2ADMIN.NONEXISTENTTABLE (KEY,QMGR,QNAME) 
                              VALUES (45,'REG356','my TESTING 2');

--Retrieve the database return codes --
  SET SQLState1 = SQLSTATE;
SET SQLCode1 = SQLCODE;
  SET SQLErrorText1 = SQLERRORTEXT;
  SET SQLNativeError1 = SQLNATIVEERROR;

--Use the THROW statement to back out the database and issue a user exception--
  THROW USER EXCEPTION MESSAGE 2950 VALUES
( 'The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 , 
SQLErrorText1 );

Sie müssen keine Ausnahmebedingung ausgeben, wenn Sie einen Datenbankfehler finden. Sie können die zurückgegebenen Fehlerinformationen auch in der Baumstruktur für die lokale Umgebung speichern und in Ihren Nachrichtenfluss einen Filterknoten einfügen, der die Nachricht entsprechend den gespeicherten Werten an untergeordnete Fehler- oder Erfolgsnachrichtenflüsse weiterleitet.

Das Musterprogramm Beispiel 'Flugreservierungen' enthält ein weiteres ESQL-Beispiel, bei dem diese Datenbankfunktionen verwendet werden.

Zugehörige Konzepte
Nachrichtenflüsse - Übersicht
Baumstruktur für Ausnahmelisten
Übersicht zu ESQL
Nachrichten modellieren
ESQL für die Fehlerbehandlung codieren
Zugehörige Tasks
Einen Nachrichtenfluss entwerfen
Nachrichtenflussinhalte definieren
Fehler in Nachrichtenflüssen behandeln
ESQL-Dateien verwalten
Von SELECT zurückgegebene Werte überprüfen
Zugehörige Verweise
Rechenknoten (Compute)
Datenbankknoten (Database)
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, 2006 Letzte Aktualisierung: 23. Aug. 2006
ak05840_