Den allermeisten dürften Exceptions bereits
von C++ und/oder Java her bekannt sein. Doch obwohl meistens direkt
damit in Verbindung gebracht, ist das Konzept der Exceptions
keinesfalls an die Existenz eine objektorientierte Sprache
gebunden.
Die Stored-Procedures kennen jedenfalls schon
seit mindestens Interbase V4.2 das Konzept der Exceptions,
—auch wenn sie zu meinem großen Bedauern relativ "starr"
sind (die aufzuwerfenden Exceptions müssen per DDL definiert
worden sein). Davon, sie ebenso flexibel wie in C++ mit
parametrisierbaren Informationen zu beladen, kann man daher nur
träumen.
Dafür entschädigen die Exceptions aber
mit einer Eigenheit, welche sie im Zusammenspiel mit der
Transaktionsverarbeitung entwickeln:
Eine nicht abgefangene Exception führt
zwangsläufig dazu, daß ein Rollback all derjenigen
Aktionen veranlasst wird, welche von der abgebrochenen Stored
Procedure (und aller direkt oder indirekt aufgerufenen Prozeduren)
durchgeführt wurden — es sei denn, es handelt sich um
eine View-ähnliche Prozedur, d.h. um eine Prozedur, die
mehrere Tupel als Ergebnis zurückgibt. In letzterem Fall
werden die Änderungen nur zu einem bestimmten Teil
zurückgenommen, nämlich bis zu dem Zeitpunkt, als das
letzte Tupel als Ergebnis zurückgegeben wurde.
Wird die Exception hingegen abgefangen, so
bleiben die bisher durchgeführten Änderungen erhalten und
die Ausführung der Prozedur wird mit dem Exception Handler
beziehungsweise den darauf folgenden Statements fortgesetzt.
(Unabhängig davon wird ein Rollback der Transaktion wie
gewohnt funktionieren und auch diese Änderungen
zurücknehmen)