Info zu DML-Anweisungen und -Transaktionen

DML-(Data Manipulation Language-)Anweisungen fügen Daten aus Datenbanktabellen hinzu, ändern und löschen sie. Eine Transaktion ist eine Folge von SQL-Anweisungen, die von Oracle AI Database als Einheit behandelt werden: Entweder werden alle Anweisungen ausgeführt oder gar keine.

Info zu Transaktionssteuerungs-Anweisungen

Eine Transaktion ist eine Folge von SQL-Anweisungen, die von Oracle AI Database als Einheit behandelt werden: Entweder werden alle Anweisungen ausgeführt oder gar keine. Transaktionen dienen dazu, Geschäftsvorgänge zu modellieren, die erfordern, dass mehrere Vorgänge als Einheit vorgenommen werden.

Beispiel: Wenn ein Manager das Geschäft verlässt, muss eine Zeile in die Tabelle JOB_HISTORY eingefügt werden, um anzugeben , wann der Manager das Geschäft verlassen hat. Für jeden Mitarbeiter, der diesem Manager unterstellt ist, muss der Wert MANAGER_ID in der Tabelle EMPLOYEES aktualisiert werden. Um diesen Prozess in einer Anwendung zu modellieren, müssen Sie die Anweisungen INSERT und UPDATE zu einer einzelnen Transaktion gruppieren.

Die grundlegenden Transaktionssteueranweisungen sind:

In der SQL*Plus-Umgebung können Sie eine Transaktionssteueranweisung nach der Aufforderung SQL> eingeben.

In der SQL Developer-Umgebung können Sie eine Transaktionskontrollanweisung in das Arbeitsblatt eingeben. SQL Developer verfügt auch über die Symbole "Änderungen festschreiben" und "Änderungen zurücksetzen", die unter "Transaktionen festschreiben" und "Transaktionen zurücksetzen" erläutert werden.

Achtung:

Wenn Sie eine Transaktion nicht ausdrücklich festschreiben, das Programm aber anormal beendet wird, erfolgt automatisch ein Rollback der letzten nicht festgeschriebenen Transaktion in der Datenbank.

Oracle empfiehlt daher, dass Transaktionen in Anwendungsprogrammen ausdrücklich beendet werden, indem sie entweder festgeschrieben oder durch Rollback aufgehoben werden.

Siehe:

Transaktionen festschreiben

Durch das Festschreiben einer Transaktion wird die Änderung dauerhaft übernommen, ihre Savepoints gelöscht und ihre Sperren aufgehoben.

Um eine Transaktion explizit festzuschreiben, verwenden Sie entweder die Anweisung COMMIT oder (in der SQL Developer-Umgebung) das Symbol Änderungen festschreiben.

Hinweis: Oracle AI Database gibt eine implizite COMMIT-Anweisung vor und nach jeder Datendefinitionssprachen-(DDL-)Anweisung ab. Informationen zu DDL-Anweisungen finden Sie unter "Info zu Datendefinitionssprachen-(DDL-)Anweisungen".

Bevor Sie eine Transaktion festschreiben:

Nachdem Sie eine Transaktion festgeschrieben haben:

Beispiel 3-1 fügt eine Zeile zur Tabelle REGIONS (eine sehr einfache Transaktion) hinzu. Das Ergebnis wird geprüft, und dann wird die Transaktion festgeschrieben.

Beispiel 3-1: Transaktion festschreiben

Vor der Transaktion:

SELECT * FROM REGIONS
ORDER BY REGION_ID;

Ergebnis:

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East and Africa

4 rows selected.

Transaktion (Zeile zu Tabelle hinzufügen):

INSERT INTO regions (region_id, region_name) VALUES (5, 'Africa');

Ergebnis:

1 row created.

Prüfen Sie, ob die Zeile hinzugefügt wurde:

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.

Schreiben Sie die Transaktion fest:

COMMIT;

Ergebnis:

Commit complete.

Siehe auch: SQL Language Reference für Oracle AI Database für Informationen zur COMMIT-Anweisung

Rollback für Transaktionen durchführen

Durch Rollback einer Transaktion werden deren Änderungen rückgängig gemacht. Sie können ein Rollback der gesamten aktuellen Transaktion ausführen, oder Sie können das Rollback nur bis zu einem angegebenen Savepoint ausführen.

Um einen ROLLBACK der aktuellen Transaktion nur bis zu einem angegebenen SAVEPOINT durchzuführen, müssen Sie die Anweisung ROLLBACK mit der Klausel TO SAVEPOINT verwenden.

Um die gesamte aktuelle Transaktion zurückzusetzen, verwenden Sie entweder die ROLLBACK-Anweisung ohne die TO SAVEPOINT-Klausel oder (in der SQL Developer-Umgebung) das Symbol Änderungen zurücksetzen.

Rollback der gesamten aktuellen Transaktion:

Ein Rollback der aktuellen Transaktion nur bis zum angegebenen Savepoint:

Um die Auswirkungen eines Rollbacks in SQL Developer anzuzeigen, müssen Sie möglicherweise auf das Symbol Aktualisieren klicken.

Als Ergebnis des Beispiels in Beispiel 3-1 verfügt das REGIONS über eine Region namens "Middle East and Afrika" und eine Region namens "Africa". Beispiel 3-2 korrigiert dieses Problem (eine sehr einfache Transaktion) und überprüft die Änderung, führt dann jedoch ein Rollback der Transaktion aus und überprüft das Rollback.

Beispiel 3-2: Rollback einer gesamten Transaktion ausführen

Vor der Transaktion:

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.

Transaktion (Tabelle ändern):

UPDATE REGIONS
SET REGION_NAME = 'Middle East'
WHERE REGION_NAME = 'Middle East and Africa';

Ergebnis:

1 row updated.

Änderung überprü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.

Rollback der Transaktion ausführen:

ROLLBACK;

Ergebnis:

Rollback complete.

Rollback überprü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.

Siehe auch: Oracle AI Database SQL Language Reference für Informationen zur ROLLBACK-Anweisung

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-3 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, rückgängig.

Beispiel 3-3: 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 AI Database SQL Language Reference für Informationen zur SAVEPOINT-Anweisung