Welchen Effekt hat es, den Commit so im Programm zu platzieren?
Die Oracle-Dokumentation beschreibt COMMIT
als:
Zweck
Verwenden Sie den COMMIT
Anweisung, um Ihre aktuelle Transaktion zu beenden und alle in der Transaktion vorgenommenen Änderungen dauerhaft zu machen. Eine Transaktion ist eine Folge von SQL-Anweisungen, die von Oracle Database als einzelne Einheit behandelt werden. Diese Anweisung löscht auch alle Sicherungspunkte in der Transaktion und hebt Transaktionssperren auf.
Wenn Sie drei PROCEDURE
haben und jeder enthält ein COMMIT
-Anweisung, dann können Sie nicht alle drei ausführen, wenn in einer letzteren eine Ausnahme auftritt, ROLLBACK
sie alle, da die Änderungen der ersten beiden bereits COMMIT
sein werden ted.
In der Regel sollten Sie dies nicht tun Verwenden Sie COMMIT
in einem PROCEDURE
oder FUNCTION
sollte es aber dem Aufrufer überlassen, COMMIT
auszuführen die Transaktion, damit sie mehrere Aktionen bündeln können.
Es gibt natürlich Anwendungsfälle, in denen Sie gegen diese Regel verstoßen möchten, aber Sie sollten jeden Fall separat betrachten und sich die Zeit nehmen, Ihre Geschäftslogik vollständig zu verstehen, bevor Sie gegen diese Regel verstoßen, damit Sie wissen, was COMMIT
ist ted in jedem Fall.
Soll ich diese Transaktion als AUTONOMOUS_TRANSACTION
durchführen ?
Ein Anwendungsfall ist die Protokollierung – möglicherweise haben Sie ein PROCEDURE
die eine andere PROCEDURE
aufruft um die Aktionen des Benutzers zu protokollieren, und unabhängig davon, ob die anfängliche Aktion erfolgreich war oder fehlschlägt, möchten Sie ein Protokoll der Aktion führen und sicherstellen, dass das Protokoll COMMIT
ist ted. In diesem Fall die Protokollierung PROCEDURE
sollte ein AUTONOMOUS_TRANSACTION
sein und ein COMMIT
enthalten -Anweisung und die aufrufende Anweisung sollten (wahrscheinlich) keine haben.
Wenn also der COMMIT
eines PROCEDURE
wird immer benötigt und ist unabhängig davon, ob der Aufrufer COMMIT
s andere Daten machen dann das PROCEDURE
eine AUTONOMOUS_TRANSACTION
. Wenn das PROCEDURE
s können gebündelt und dann ROLLBACK
werden Als Gruppe möchten Sie sie dann nicht zu AUTONOMOUS_TRANSACTION
machen s.