Wat is het effect van het plaatsen van de commit op deze manier in het programma?
De Oracle-documentatie beschrijft COMMIT
als:
Doel
Gebruik de
COMMIT
afschrift om uw huidige transactie te beëindigen en om alle wijzigingen die in de transactie zijn uitgevoerd permanent te maken. Een transactie is een opeenvolging van SQL-instructies die Oracle Database als een enkele eenheid behandelt. Deze verklaring wist ook alle opslagpunten in de transactie en geeft transactievergrendelingen vrij.
Als u drie PROCEDURE
. heeft en elk bevat een COMMIT
statement, dan kun je ze niet alle drie uitvoeren, als er een uitzondering optreedt in een laatste, ROLLBACK
ze allemaal, want de wijzigingen van de eerste twee zijn al COMMIT
ted.
Als algemene regel moet u niet gebruik COMMIT
in een PROCEDURE
of FUNCTION
maar laat het aan de beller over om COMMIT
de transactie zodat ze meerdere acties kunnen bundelen.
Er zijn natuurlijk gevallen waarin u deze regel wilt overtreden, maar u moet elk geval afzonderlijk bekijken en de tijd nemen om uw bedrijfslogica volledig te begrijpen voordat u deze regel overtreedt, zodat u weet wat COMMIT
is. in elk geval.
Moet ik deze transactie uitvoeren als
AUTONOMOUS_TRANSACTION
?
Een use-case is loggen - u heeft mogelijk een PROCEDURE
die een andere PROCEDURE
. aanroept om de acties van de gebruiker te loggen en, ongeacht of de initiële actie slaagt of mislukt, u een logboek van de actie wilt bijhouden en ervoor wilt zorgen dat het logboek COMMIT
is ted. In dit geval is het loggen PROCEDURE
moet een AUTONOMOUS_TRANSACTION
. zijn en bevatten een COMMIT
statement en het aanroepende statement zouden (waarschijnlijk) geen van beide moeten hebben.
Dus, als de COMMIT
van één PROCEDURE
is altijd vereist en is onafhankelijk van het feit of de beller COMMIT
s andere gegevens voer dan de PROCEDURE
een AUTONOMOUS_TRANSACTION
. Als de PROCEDURE
s kunnen worden gebundeld en vervolgens ROLLBACK
als een groep, dan wil je ze niet AUTONOMOUS_TRANSACTION
. maken v.