Qual è l'effetto di inserire il commit in questo modo nel programma?
La documentazione Oracle descrive COMMIT
come:
Scopo
Usa il COMMIT
dichiarazione per terminare la transazione corrente e rendere permanenti tutte le modifiche eseguite nella transazione. Una transazione è una sequenza di istruzioni SQL che Oracle Database considera come una singola unità. Questa istruzione cancella anche tutti i punti di salvataggio nella transazione e rilascia i blocchi delle transazioni.
Se hai tre PROCEDURE
e ognuno contiene un COMMIT
istruzione quindi non puoi eseguire tutti e tre quindi, se si verifica un'eccezione in quest'ultima, ROLLBACK
tutti loro in quanto le modifiche delle prime due saranno già COMMIT
ted.
Come regola generale, dovresti non usa COMMIT
in una PROCEDURE
o FUNCTION
ma dovrebbe lasciare al chiamante il compito di COMMIT
la transazione in modo che possano raggruppare più azioni insieme.
Ci sono, ovviamente, casi d'uso in cui vorrai violare questa regola, ma dovresti considerare ogni caso separatamente e dedicare del tempo a comprendere appieno la tua logica aziendale prima di infrangere questa regola in modo da sapere cos'è COMMIT
ted in ogni caso.
Devo effettuare questa transazione come AUTONOMOUS_TRANSACTION
?
Un caso d'uso è la registrazione:potresti avere una PROCEDURE
che chiama un altro PROCEDURE
per registrare le azioni dell'utente e, indipendentemente dal fatto che l'azione iniziale abbia esito positivo o negativo, si desidera mantenere un registro dell'azione e assicurarsi che il registro sia COMMIT
ted. In questo caso, la registrazione PROCEDURE
dovrebbe essere una AUTONOMOUS_TRANSACTION
e contengono un COMMIT
istruzione e l'istruzione chiamante dovrebbero (probabilmente) non avere nessuno dei due.
Quindi, se il COMMIT
di una PROCEDURE
è sempre obbligatorio ed è indipendente dal fatto che il chiamante sia COMMIT
s altri dati quindi eseguire la PROCEDURE
un AUTONOMOUS_TRANSACTION
. Se la PROCEDURE
s possono essere raggruppati insieme e quindi ROLLBACK
come gruppo allora non vuoi renderli AUTONOMOUS_TRANSACTION
s.