Was ist der Effekt, das Commit so in Programm zu setzen?
Die Oracle Documentation beschreibt COMMIT
wie:
Zweck
Verwenden Sie die COMMIT
Anweisung Ihre aktuelle Transaktion zu beenden und permanent alle Änderungen in der Transaktion durchgeführt werden.Eine Transaktion ist eine Sequenz von SQL-Anweisungen, die Oracle Database als eine einzige Einheit behandelt. Diese Anweisung löscht auch alle Sicherungspunkte in der Transaktion und gibt Transaktionssperren frei.
Wenn Sie drei PROCEDURE
haben und jedes enthält eine COMMIT
Anweisung, dann können Sie nicht alle drei dann ausführen, wenn eine Ausnahme in einem Letztere auftritt, ROLLBACK
sie alle als die Veränderungen von den ersten beiden bereits COMMIT
ted wird .
Als allgemeine Regel sollten Sie nicht Verwendung COMMIT
in einem PROCEDURE
oder FUNCTION
aber sollte es dem Anrufer zu COMMIT
die Transaktion verlassen, so dass sie zusammen mehrere Aktionen bündeln können.
Es gibt natürlich Anwendungsfälle, in denen Sie diese Regel verletzen möchten, aber Sie sollten jeden Fall separat betrachten und sich Zeit nehmen, um Ihre Geschäftslogik vollständig zu verstehen, bevor Sie diese Regel brechen, damit Sie wissen, was in ihnen steckt Beispiel.
Sollte ich diese Transaktion als AUTONOMOUS_TRANSACTION
machen?
Ein Anwendungsfall ist die Anmeldung - Sie können eine PROCEDURE
haben, die eine andere PROCEDURE
nennt die Aktionen des Benutzers zu protokollieren und unabhängig davon, ob die erste Aktion erfolgreich ist oder fehlschlägt Sie ein Protokoll der Aktion halten wollen und dafür sorgen, dass log ist COMMIT
ted. In diesem Fall sollte die Protokollierung PROCEDURE
eine AUTONOMOUS_TRANSACTION
sein und eine COMMIT
-Anweisung enthalten und die aufrufende Anweisung sollte (wahrscheinlich) keine haben.
Also, wenn die COMMIT
ein PROCEDURE
immer erforderlich ist, und ist unabhängig davon, ob der Anrufer COMMIT
s andere Daten dann die PROCEDURE
ein AUTONOMOUS_TRANSACTION
machen. Wenn die PROCEDURE
s zusammen gebündelt werden können und dann ROLLBACK
als eine Gruppe, dann möchten Sie sie nicht AUTONOMOUS_TRANSACTION
s machen.
Dies ist eine Nur-Link-Antwort. Es wäre besser, die relevanten Punkte aus dem verknüpften Artikel in die Antwort aufzunehmen. – MT0
Auch autonome Transaktionen sind leicht zu missbrauchen. Sie sollten den Leuten nicht raten, sie zu benutzen, wenn Sie nicht wissen, dass sie ein passendes Szenario haben. Das ist hier nicht der Fall. – APC