WHEN … DO
Eine Ausnahme abfangen und den Fehler behandeln
PSQL
WHEN {<error> [, <error> ...] | ANY} DO <compound_statement> <error> ::= { EXCEPTION exception_name | SQLCODE number | GDSCODE errcode | SQLSTATE sqlstate_code }
Argument | Beschreibung |
---|---|
exception_name |
Name der Ausnahme |
number |
SQLCODE-Fehlercode |
errcode |
Symbolischer GDSCODE-Fehlername |
sqlstate_code |
String-Literal mit dem SQLSTATE-Fehlercode |
compound_statement |
Eine einzelne Anweisung oder ein Block von Anweisungen |
Die Anweisung WHEN … DO
wird verwendet, um Fehler und benutzerdefinierte Ausnahmen zu behandeln.Die Anweisung erfasst alle Fehler und benutzerdefinierten Ausnahmen, die nach dem Schlüsselwort WHEN
aufgeführt sind.Wenn WHEN
das Schlüsselwort ANY
folgt, fängt die Anweisung jeden Fehler oder jede benutzerdefinierte Ausnahme ab, auch wenn sie bereits in einer WHEN
-Anweisung weiter oben im Block behandelt wurden.
Der WHEN … DO
-Block muss sich am Ende eines Anweisungsblocks befinden, vor der Anweisung END
des Blocks.
Auf das Schlüsselwort DO
folgt eine Anweisung oder ein Anweisungsblock innerhalb eines BEGIN … END
-Wrappers, der die Ausnahme behandelt.Die Kontextvariablen SQLCODE
, GDSCODE
und SQLSTATE
stehen im Kontext dieser Anweisung oder dieses Blocks zur Verfügung.Die Funktion RDB$ERROR
kann verwendet werden, um den SQLCODE, GDSCODE, SQLSTATE, den benutzerdefinierten Ausnahmenamen und die Ausnahmemeldung abzurufen.Die Anweisung EXCEPTION
ohne Parameter kann auch in diesem Kontext verwendet werden, um den Fehler oder die Ausnahme erneut zu werfen.
Die Anweisung oder der Block WHEN … DO
wird nur ausgeführt, wenn eines der von seinen Bedingungen betroffenen Ereignisse zur Laufzeit eintritt.Wenn die Anweisung WHEN … DO
ausgeführt wird, wird die Ausführung auch dann fortgesetzt, als ob kein Fehler aufgetreten wäre: Der Fehler oder die benutzerdefinierte Ausnahme beendet weder die Operationen des Triggers oder der gespeicherten Prozedur noch setzt sie diese zurück.
Wenn jedoch die WHEN … DO
-Anweisung oder der Block nichts zur Behandlung oder Behebung des Fehlers tut, wird die DML-Anweisung (SELECT
, INSERT
, UPDATE
, DELETE
, MERGE
), die den Fehler verursacht hat, error wird zurückgesetzt und keine der Anweisungen darunter im selben Anweisungsblock wird ausgeführt.
Important
|
|