TRANSAKTIONEN bei SQL
Der SQLEXEC-Befehl wurde für Transaktionshandling erweitert:
SQLEXEC "#AUTOCOMMIT_OFF",N%
SQLEXEC "#AUTOCOMMIT_ON",N%
SQLEXEC "#COMMIT",N%
SQLEXEC "#ROLLBACK",N%
Normalerweise wird unter ODBC jeder SQL-Befehl sofort und endgültig ausgeführt, was in 90% aller Fälle auch korrekt ist. Aber es gibt Fälle, wo mehrere Datenbankanweisungen nur komplett oder überhaupt nicht ausgeführt werden sollen. Hier greifen die Transaktionen. Eine Transaktion wird entweder komplett ausgeführt oder gar nicht.
Im Normalzustand (AUTOCOMMIT_ON) ist jeder SQL-Befehl eine eigene Transaktion. mit AUTOCOMMIT_OFF kann man dies abschalten. Alle folgenden Befehle sind nun eine Transaktion,
bis sie mit einem "COMMIT" bestätigt und endgültig ausgeführt werden oder mit "ROLLBACK" verworfen werden. Alle Änderungen in den Datentabellen vor "COMMIT" sind nur temporär und werden im Falle eines "ROLLBACK" wieder zurückgenommen. Nach COMMIT oder ROLLBACK beginnt eine neue Transaktion. Mit AUTOCOMMIT_ON wird das ursprüngliche Verhalten wieder eingeschaltet. Ist zu diesem Zeitpunkt noch eine Transaktion offen wird sie mit dem nächsten SQL-Befehl beendet. Auch SQLDONE beendet etwaige offene Transaktionen. Sollte während einer Transaktion ein schwerer Fehler auftreten (Client-Rechner stürzt ab, SQL-Verbindung zum Server bricht ab, etc.), führt die Datenbank in aller Regel ein automatisches ROLLBACK durch.
(Für die, die es interessiert: Getestet habe ich die Funktionen mit einer entfernten ORACLE-Datenbank, mit der der Clientrechner über Standleitung mit TCP/IP-Protokoll verbunden war.)
|