Wenn beim Zugriff des Brokers auf eine externe Datenbank ein Fehler auftritt, können Sie entweder den Broker während der Knotenverarbeitung eine Ausnahmebedingung auslösen lassen oder ESQL-Anweisungen verwenden, um die Ausnahmebedingung im Knoten selbst zu verarbeiten.
Standardmäßig wird die erste Methode verwendet; von der ESQL-Verarbeitung im aktuellen Knoten wird abgesehen. 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-, Database- oder Computeknotens inaktivieren. Wenn Sie diese Eigenschaft inaktivieren, legt der Knoten die Datenbankstatusanzeiger SQLCODE, SQLSTATE, SQLNATIVEERROR und SQLERRORTEXT entsprechend den Informationen vom Datenbankmanager fest, anstatt eine Ausnahmebedingung 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.
Mithilfe 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, überprüfen Sie die Statusanzeiger nach der Ausführung jeder Datenbankanweisung, 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, sodass die Transaktion zurückgesetzt wird. Dafür können Sie die ESQL-THROW-Anweisung 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, deshalb müssen Sie dies explizit testen (siehe Von SELECT zurückgegebene Werte überprüfen).
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; -- 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 Benutzerausnahmebedingung mit der THROW-Anweisung-- 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 Filter-Knoten einfügen, der die Nachricht entsprechend den gespeicherten Werten an untergeordnete Fehler- oder Erfolgsnachrichtenflüsse weiterleitet.