Anfang des Inhaltsbereichs

Vorgehensweisen Fehlerbehandlung mit WHENEVER-Anweisungen Dokument im Navigationsbaum lokalisieren

Verwendung

Mit Hilfe von WHENEVER-Anweisungen programmieren Sie Standardbehandlungen von Fehlern und Ausnahmesituationen, die bei der Ausführung von eingebetteten SQL-Anweisungen auftreten können. Sie können vier verschiedene Arten von Rückmeldungen des Datenbanksystems prüfen lassen und aus vier Standardreaktionen auf diese Meldungen auswählen.

Hinweis

Eine WHENEVER-Anweisung sollten Sie zum Beispiel dann verwenden, wenn das Anwendungsprogramm die Werte der Rückmeldungen sqlcodeoder sqlwarn0 im Anschluss an eine SQL-Anweisung nicht abfragt.

Syntax

EXEC SQL WHENEVER <condition> <action>;

Für <condition> geben Sie einen der folgenden Fälle an:

SQLWARNING

sqlwarn0 hat den Wert W.
Es existiert mindestens eine Warnung.

SQLERROR

sqlcode hat einen negativen Wert.
Es ist ein Fehler aufgetreten.

NOT FOUND

sqlcode hat den Wert 100 (ROW NOT FOUND). Es wurde keine oder keine weitere Tabellenzeile gefunden.

SQLEXCEPTION

sqlcode hat einen positiven Wert größer als 100. Es ist eine Ausnahmesituation aufgetreten.

Für <action> geben Sie eine der möglichen Aktionen für WHENEVER-Anweisungen an.

Achtung

Wenn die Bedingung SQLERROR auftritt, sollte das Anwendungsprogramm immer abgebrochen und der Fehler analysiert werden.

Wenn Sie als Fehlerbehandlung <action> eine Funktion aufrufen, die ebenfalls SQL-Anweisungen enthält, die Fehlermeldungen liefern können, dann beginnen Sie die Funktion mit einer WHENEVER CONTINUE-Anweisung, um Endlosschleifen zu vermeiden.

Diese Grafik wird im zugehörigen Text erklärt

EXEC SQL WHENEVER SQLEND CALL CheckSQLCode(&sqlca);

EXEC SQL SELECT DIRECT NAME, ORT
         INTO :name, :ort FROM HOTEL KEY HNR = :hnr;

void CheckSQLCode(sqlcatype *sqlca)
{
  if (sqlca->sqlcode != 0) {
    code = sqlca->sqlcode;
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL INSERT INTO FEHLER VALUES (:code);
  }
}

Ende des Inhaltsbereichs