Savepoints in Transaktionen festlegen
Die Anweisung SAVEPOINT markiert einen SAVEPOINT in einer Transaktion. Dies ist ein Punkt, zu dem Sie später einen Rollback durchführen können. Savepoints sind optional, und eine Transaktion kann mehrere Savepoints haben. In Beispiel 3-9 wird eine Transaktion ausgeführt, die mehrere DML-Anweisungen und mehrere Savepoints enthält. Dadurch gehen nur Änderungen, die nach diesem Savepoint durchgeführt wurden, zurück.
Beispiel 3-9: Rollback einer Transaktion zu einem Savepoint ausführen
Tabelle REGIONS vor der Transaktion prüfen:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Ergebnis:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 Africa
5 rows selected.
Länder in Region 4 vor Transaktion prüfen:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;
Ergebnis:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Egypt EG 4
Israel IL 4
Kuwait KW 4
Nigeria NG 4
Zambia ZM 4
Zimbabwe ZW 4
6 rows selected.
Länder in Region 5 vor Transaktion prüfen:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;
Ergebnis:
no rows selected
Transaktion mit mehreren Savepoints:
UPDATE REGIONS
SET REGION_NAME = 'Middle East'
WHERE REGION_NAME = 'Middle East and Africa';
UPDATE COUNTRIES
SET REGION_ID = 5
WHERE COUNTRY_ID = 'ZM';
SAVEPOINT zambia;
UPDATE COUNTRIES
SET REGION_ID = 5
WHERE COUNTRY_ID = 'NG';
SAVEPOINT nigeria;
UPDATE COUNTRIES
SET REGION_ID = 5
WHERE COUNTRY_ID = 'ZW';
SAVEPOINT zimbabwe;
UPDATE COUNTRIES
SET REGION_ID = 5
WHERE COUNTRY_ID = 'EG';
SAVEPOINT egypt;
Tabelle REGIONS nach der Transaktion prüfen:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Ergebnis:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East
5 Africa
5 rows selected.
Länder in Region 4 nach Transaktion prüfen:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;
Ergebnis:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Israel IL 4
Kuwait KW 4
2 rows selected.
Länder in Region 5 nach Transaktion prüfen:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;
Ergebnis:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Egypt EG 5
Nigeria NG 5
Zambia ZM 5
Zimbabwe ZW 5
4 rows selected.
ROLLBACK TO SAVEPOINT nigeria;
Tabelle REGIONS nach Rollback prüfen:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Ergebnis:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East
5 Africa
5 rows selected.
Länder in Region 4 nach Rollback prüfen:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;
Ergebnis:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Egypt EG 4
Israel IL 4
Kuwait KW 4
Zimbabwe ZW 4
4 rows selected.
Länder in Region 5 nach Rollback prüfen:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;
Ergebnis:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Nigeria NG 5
Zambia ZM 5
2 rows selected.
Siehe auch: Oracle Database SQL Language Reference für Informationen zur SAVEPOINT-Anweisung