Exceptions
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)