sql >> Database >  >> RDS >> Oracle

Wat is het effect van het plaatsen van de commit na DML in de procedure?

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.



  1. Top open source-tools voor PostgreSQL-migraties

  2. Gecomprimeerd CSV-bestand importeren in PostgreSQL

  3. Hoe controleer ik of een kolom bestaat voordat deze wordt toegevoegd aan een bestaande tabel in PL/SQL?

  4. Hoe vraag ik naar alle datums die groter zijn dan een bepaalde datum in SQL Server?