Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Gespeicherte Prozeduren und Trigger » Prozeduren, Trigger und Batches verwenden » Steueranweisungen

 

Atomare zusammengesetzte Anweisungen

Eine atomare Anweisung wird entweder komplett oder gar nicht ausgeführt. Beispiel: Eine UPDATE-Anweisung, die Tausende von Zeilen aktualisiert, kann nach den ersten aktualisierten Zeilen auf einen Fehler stoßen. Wenn die Anweisung nicht abgeschlossen werden kann, werden alle bisher geänderten Zeilen wieder auf den Ausgangsstatus zurückgesetzt. Die UPDATE-Anweisung ist atomar.

Alle nicht zusammengesetzten SQL-Anweisungen sind atomar. Eine zusammengesetzte Anweisung kann atomar gemacht werden, indem nach dem Schlüsselwort BEGIN das Schlüsselwort ATOMIC angehängt wird.

BEGIN ATOMIC
   UPDATE Employees
   SET ManagerID = 501
   WHERE EmployeeID = 467;
    UPDATE Employees
   SET BirthDate = 'bad_data';
END

In diesem Beispiel sind die beiden Aktualisierungsanweisungen Teil einer atomaren zusammengesetzten Anweisung. Sie können nur als Gesamtheit gelingen oder fehlschlagen. Die erste Aktualisierungsanweisung wird erfolgreich verlaufen. Die zweite verursacht einen Datenkonvertierungsfehler, da der der Spalte "BirthDate" zugewiesene Wert nicht in ein Datum umgewandelt werden kann.

Die atomare zusammengesetzte Anweisung schlägt fehl, und die Wirkung beider UPDATE-Anweisungen wird annulliert. Auch wenn die derzeit gerade ausgeführte Transaktion festgeschrieben wird, werden die Anweisungen in einer atomaren zusammengesetzten Anweisung nicht wirksam.

Wenn eine atomare zusammengesetzte Anweisung erfolgreich ist, werden die innerhalb der zusammengesetzten Anweisung durchgeführten Änderungen nur wirksam, wenn die derzeit ausführende Transaktion festgeschrieben wird. Für den Fall, dass eine atomare zusammengesetzte Anweisung erfolgreich ist, die Transaktion, in der sie vorkommt, jedoch zurückgesetzt wird, so wird die atomare zusammengesetzte Anweisung ebenfalls zurückgesetzt. Am Anfang der atomaren zusammengesetzten Anweisung wird ein Savepoint eingerichtet. Alle Fehler innerhalb der Anweisung führen zum Zurücksetzen zu diesem Savepoint.

Wenn eine atomare zusammengesetzte Anweisung im Autocommit-Modus (unverkettet) ausgeführt wird, ändert sich der Festschreibemodus auf manuell (verkettet), bis die Anweisungsausführung abgeschlossen ist. Im manuellen Modus bewirken DML-Anweisungen, die innerhalb einer atomaren zusammengesetzten Anweisung ausgeführt werden, kein sofortiges COMMIT oder ROLLBACK. Wenn die atomare zusammengesetzte Anweisung erfolgreich abschließt, wird eine COMMIT-Anweisung ausgeführt, ansonsten wird eine ROLLBACK-Anweisung ausgeführt. Weitere Hinweise zum Autocommit-Verhalten finden Sie unter Automatisch oder manuell festschreiben und Autocommit-Verhalten steuern.

COMMIT und ROLLBACK sowie manche ROLLBACK TO SAVEPOINT-Anweisungen sind in einer atomaren zusammengesetzten Anweisung nicht gestattet. Siehe Transaktionen und Savepoints in Prozeduren und Triggern.

Es gibt einen Fall, in dem einige, aber nicht alle Anweisungen in einer atomaren zusammengesetzten Anweisung ausgeführt werden. Und zwar dann, wenn eine Ausnahmeroutine innerhalb einer zusammengesetzten Anweisung einen Fehler verarbeiten muss.

Siehe Ausnahmeroutinen in Prozeduren und Triggern verwenden.