COMMIT WORK beendet eine SQL-Transaktion und schreibt die während der Transaktion durchgeführten Änderungen in der Datenbank fest. Die geänderten Daten stehen damit allen anderen Transaktionen zur Verfügung.
Mit der ersten transaktionseinleitenden SQL-Anweisung nach COMMIT WORK beginnt eine neue SQL-Transaktion.
COMMIT [WORK]
SQL-Transaktion
Eine SQL-Transaktion wird mit einer transaktionseinleitenden SQL-Anweisung begonnen. Alle folgenden SQL-Anweisungen bis zur nächsten COMMIT WORK- bzw. ROLLBACK WORK-Anweisung gehören zu derselben Transaktion. COMMIT WORK bzw. ROLLBACK WORK beendet die Transaktion.
Transaktion unter openUTM
Die Anweisung COMMIT WORK ist nicht zulässig, wenn Sie mit openUTM arbeiten. In diesem Fall wird die Transaktionssteuerung komplett mit UTM-Sprachmitteln durchgeführt. Die Synchronisation von SESAM/SQL- und UTM-Transaktionen wird durch openUTM gewährleistet. Eine UTM-Transaktion endet mit dem Setzen eines Sicherungspunktes.
Transaktion einleiten
Folgende SQL-Anweisungen leiten keine Transaktion ein:
DECLARE CURSOR (nicht ausführbar)
PERMIT
SET CATALOG
SET SCHEMA
SET SESSION AUTHORIZATION
SET TRANSACTION
WHENEVER (nicht ausführbar)
Utility-Anweisungen
Die Anweisungen EXECUTE und EXECUTE IMMEDIATE leiten nur dann eine SQL-Transaktion ein, wenn die jeweils auszuführende, dynamisch formulierte Anweisung eine Transaktion einleitet.
Jede andere SQL-Anweisung leitet eine SQL-Transaktion ein, wenn sie ausgeführt wird und noch keine Transaktion offen ist.
Anweisungen innerhalb von Transaktionen
Folgende Anweisungen dürfen nicht innerhalb einer Transaktion ausgeführt werden:
SET SESSION AUTHORIZATION
SET TRANSACTION
Utility-Anweisungen
Eine SQL-Anweisung zur Datenmanipulation (abfragen, ändern) darf nicht innerhalb einer Transaktion ausgeführt oder vorbereitet werden, in der eine SQL-Anweisung zur Definition oder Verwaltung von Schemata, Speicherstrukturen oder Benutzereinträgen ausgeführt wird.
CALL-DML-Transaktion
Innerhalb einer CALL-DML-Transaktion ist die SQL-Anweisung COMMIT WORK nicht erlaubt (siehe Abschnitt „SQL-Anweisungen in CALL-DML-Transaktionen").
Auswirkungen von COMMIT WORK
COMMIT WORK hat Auswirkungen auf nachfolgende Transaktionen und auf die in der Transaktion geöffneten Cursor und Voreinstellungen.
Auswirkungen auf nachfolgende Transaktionen
COMMIT WORK setzt Isolations- bzw. Konsistenzlevel und Transaktionsmodus, die mit einer SET TRANSACTION-Anweisung transaktionsspezifisch eingestellt wurden, wieder auf ihre voreingestellten Werte zurück. Eine nachfolgend begonnene Transaktion besitzt daher wieder den voreingestellten Isolations- bzw. Konsistenzlevel und Transaktionsmodus, wenn diese nicht wieder mit SET TRANSACTION geändert wurden.
Auswirkungen auf Cursor (gilt nicht für lokale Cursor in Prozeduren)
COMMIT WORK schließt alle innerhalb der Transaktion geöffneten Cursor. Soll eine Cursorposition über das Transaktionsende hinaus gerettet werden, können Sie die Position mit der Anweisung STORE sichern und später mit RESTORE wiederherstellen.
Es ist möglich, einen Cursor mit der WITH HOLD-Klausel zu definieren. Ein solcher Cursor wird auch durch (erfolgreiches) COMMIT WORK nicht geschlossen. In einer nachfolgenden Transaktion kann er mit FETCH positioniert werden.
Auswirkungen auf Voreinstellungen
Mit SET CATALOG, SET SCHEMA und SET SESSION AUTHORIZATION definierte Voreinstellungen sind nach COMMIT WORK festgeschrieben.
Verhalten von SESAM/SQL im Fehlerfall
Kann eine SQL-Transaktion auf Grund eines Fehlers nicht ordnungsgemäß beendet werden, setzt SESAM/SQL die gesamte Transaktion zurück. Bei ROLLBACK WORK ist beschrieben, welche Datenbankobjekte davon betroffen sind.
Siehe auch
ROLLBACK WORK, SET TRANSACTION