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.
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.
EXEC SQL WHENEVER <condition> <action>;
Für <condition> geben Sie einen der folgenden Fälle an:
SQLWARNING |
sqlwarn0 hat den Wert W. |
SQLERROR |
sqlcode hat einen negativen Wert. |
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.
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.
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);
}
}