Die INNER TRANSACTION-Anweisung (inner_transaction_statement) ermöglicht die Einbettung einer Transaktion in eine Transaktion. Die eingebettete Transaktion kann beliebig beendet werden, die sie umgebende Transaktion wird unabhängig davon fortgesetzt.
<inner_transaction_statement> ::= INNER
TRANSACTION BEGIN
|
INNER TRANSACTION COMMIT
|
INNER TRANSACTION ROLLBACK
Es wird eine Transaktion eröffnet ohne die bereits bestehende Transaktion zu beenden. Anschließend kann eine beliebige Folge von SQL-Anweisungen folgen. Die Folge der SQL-Anweisungen darf keine weiteren INNER TRANSACTION-Anweisungen enthalten. Zu einem Zeitpunkt kann es daher höchstens eine offene innere Transaktion geben.
Nach Beendigung der inneren Transaktion wird die bestehende Transaktion unverändert fortgesetzt.
Wird eine innere Transaktion mit COMMIT abgeschlossen, bleiben die durchgeführten Änderungen erhalten auch wenn die umgebende Transaktion rückgängig gemacht wird. Voraussetzung dafür ist, dass eine offene innere Transaktion existiert.
Wird eine innere Transaktion mit ROLLBACK abgeschlossen wird, werden alle seit dem INNER TRANSACTION BEGIN durchgeführten Datenbankänderungen rückgängig gemacht. Voraussetzung dafür ist, dass eine offene innere Transaktion existiert.
Sperranforderungen der inneren Transaktion können mit gehaltenen Sperren der umgebenden Transaktion kollidieren.
Wenn die umgebende Transaktion beendet wird und noch eine offene innere Transaktion existiert, so wird diese zuvor genauso mit COMMIT oder ROLLBACK beendet wie die umgebende Transaktion.
Die INNER TRANSACTION-Anweisung eignet sich besonders für Anwendungen, die Informationen unabhängig vom Ausgang einer Transaktion in der Datenbank festschreiben wollen, z.B. bei Protokollierungen.
Siehe auch: