Sonntag, 24. März 2013

Transaktionen SAVEPOINT

Arbeitet man in einer Transaktion und möchte im Fehlerfall nicht die komplette Transaktion sondern nur einen speziellen Code-Abschnitt zurückspielen, so kann man mit sogenannten Savepoints arbeiten.

Von diesen Haltepunkten kann man beliebig viele setzen.
Auch hier ist es wieder ratsam einen Namen pro Savepoint zu vergeben, um diesen später gezielt anzusprechen.

Einen Savepoint setzt man wie folgt:

-- Savepoint setzen 
SAVE TRANSACTION sp1


Um von der aktuellen (Verarbeitungs-)Position in der Transaktion alles bis zu einem Savepoint zurückzusetzen muss man das ROLLBACK wie folgt aufrufen, wobei sp1 der Name des Savepoints ist.


-- Zurückspielen der Transaktion bis zum angegebene Savepoint
ROLLBACK TRANSACTION sp1


Beispiel:


INSERT INTO Farben
VALUES('rot')

SAVE TRANSACTION sp1

INSERT INTO Farben
VALUES('blau')

-- Rollback bis zum Savepoint sp1 durchführen
-- Die Farbe "blau" wird entfernt
-- Die Farbe "rot bleibt weiterhin bestehen
ROLLBACK TRANSACTION sp1

-- Die gesamte Transaktion wird zurückgeschrieben
-- Die Farbe "blau" wird entfernt
-- Die Farbe "rot wird entfernt
ROLLBACK TRANSACTION


Hinweis:
Hier unterscheidet sich die Verarbeitung zwischen Oracle und MSSQL-Server.
Beim MSSQL-Server wird der Savepoint bei einen Rollback mit verworfen.
Bei Oracle hingegen bleibt dieser bestehen.


Außerdem unterscheidet sich die Syntax bei Oracle wie folgt:


-- Savepoint setzen 
SAVEPOINT sp1

-- Rollback bis zum Savepoint
ROLLBACK TO SAVEPOINT sp1

Keine Kommentare:

Kommentar veröffentlichen