Das Pragma AUTONOMOUS TRANSACTION ermöglicht es, Daten unabhängig vom Ausgang der umgebenden Transaktion in eine Datenbank zu schreiben.
Insbesondere werden die Daten persistent in die Datenbank geschrieben, bevor möglicherweise die SQL-Anweisung ROLLBACK WORK der Transaktion ausgeführt wird.
Das Pragma darf nur bei SQL-Anweisungen zum Ändern von Daten, also bei INSERT, UPDATE (Suchbedingung erfüllt), DELETE (Suchbedingung erfüllt), MERGE und CALL angegeben werden. Wird das Pragma bei Anweisungen zum Abfragen von Daten angegeben, dann wird die Anweisung mit SQLSTATE abgewiesen.
Das Pragma darf in Routinen nicht verwendet werden.
AUTONOMOUS TRANSACTION
Hinweise
Die SQL-Anweisung hinter dem Pragma AUTONOMOUS TRANSACTION wird in der aktuellen Transaktion des Anwenders, aber in einer eigenen Ablaufumgebung (eigenen Thread, eigener Transaktionskontext) ausgeführt. Transaktionssteuernde Anweisungen des Anwenders haben keine Wirkung.
Es wird die interne Benutzer-Identifikation (
APPLICATION-NAME=AUTTRAN
) verwendet, siehe Handbuch „ Datenbankbetrieb“. Sie ist während des Ablaufs der autonomen Transaktion in Informationsausgaben sichtbar. Eine autonome Transaktion kann aber nicht administriert werden.Lock-Konflikte
Der Transaktionskontext der autonomen Transaktion ist unabhängig von der umgebenden Transaktion der Anwendung und von anderen Transaktionen.
Dies kann einerseits zu einem Deadlock zwischen der autonomen Transaktion und der umgebenden Transaktion führen. Diese Deadlock-Situation wird durch Rücksetzen der autonomen Transaktion aufgelöst. Der autonomen Transaktion wird der SQLSTATE 81SAT gemeldet.
Dies kann andererseits zu einem Deadlock zwischen der autonomen Transaktion und anderen Transaktionen führen. Solche Deadlock-Situationen werden durch Rücksetzen der „billigsten“ Transaktion aufgelöst. Wenn die autonome Transaktion davon betroffen ist, dann wird ihr der SQLSTATE 81SAT gemeldet.Abbruch der Anwendung
Wenn die Anwendung abbricht, die die autonome Transaktion ausgelöst hat, dann wird zuerst die autonome Transaktion abgebrochen und danach die aktuelle Transaktion bzw. die Anwendung.