Qual é o efeito de colocar o commit assim no programa?
A Documentação da Oracle descreve
COMMIT
como:
Propósito
Use oCOMMIT
para encerrar sua transação atual e tornar permanentes todas as alterações realizadas na transação. Uma transação é uma sequência de instruções SQL que o Oracle Database trata como uma única unidade. Essa instrução também apaga todos os pontos de salvamento na transação e libera os bloqueios de transação.
Se você tiver três
PROCEDURE
e cada um contém um COMMIT
então você não pode executar todos os três então, se ocorrer uma exceção em um último, ROLLBACK
todos eles, pois as alterações dos dois primeiros já serão COMMIT
ted. Como regra geral, você não use
COMMIT
em um PROCEDURE
ou FUNCTION
mas deve deixar para o chamador COMMIT
a transação para que possam agrupar várias ações. Existem, é claro, casos de uso em que você desejará violar essa regra, mas você deve considerar cada caso separadamente e dedicar um tempo para entender completamente sua lógica de negócios antes de quebrar essa regra para saber o que é
COMMIT
tado em cada instância.
Devo fazer esta transação comoAUTONOMOUS_TRANSACTION
?
Um caso de uso está registrando - você pode ter um
PROCEDURE
que chama outro PROCEDURE
para registrar as ações do usuário e, independentemente de a ação inicial ter sucesso ou falhar, você deseja manter um registro da ação e garantir que o registro seja COMMIT
ted. Nesse caso, o registro PROCEDURE
deve ser um AUTONOMOUS_TRANSACTION
e conter um COMMIT
e a instrução de chamada não deve (provavelmente) ter nenhum. Então, se o
COMMIT
de um PROCEDURE
é sempre necessário e é independente se o chamador COMMIT
s outros dados, em seguida, faça o PROCEDURE
um AUTONOMOUS_TRANSACTION
. Se o PROCEDURE
s podem ser agrupados e então ROLLBACK
como um grupo, então você não quer torná-los AUTONOMOUS_TRANSACTION
s.