Pular para o conteúdo

AUTONOMOUS_TRANSACTION: Melhorando a gestão de commits e rollbacks no Oracle

AUTONOMOUS_TRANSACTION

Podemos nos deparar em situações em que não podemos permitir que chamadas a funções, procedures ou triggers rodem na mesma transaction, intervindo assim em commits e rollbacks. Antes de mostrar um exemplo, criem a seguinte tabela.

CREATE TABLE exemplo(
  numero NUMBER
);

Vejamos um exemplo clássico agora.

AUTONOMOUS_TRANSACTION

Veja que na linha 7, na procedure, temos um commit após inserir 5 linhas, os números de 6 à 10.

Temos um bloco anônimo, nas linhas 11 à 17. Nesse bloco, no seu início, inserimos mais 5 linhas, os números 1 à 5. Após inserir essas linhas é feita a chamada a procedure, que logo depois é feito um rollback na linha 16. Qual será o resultado? Quais as linhas existentes na tabela? O resultado é que nada foi feito o rollback, todas as 10 linhas sofreram commit. Talvez o desejado fosse que as linhas de 1 à 5 fosse feito o rollback, mas isto não aconteceu. Acontece que a chamada a procedure acontece tudo na mesma transaction do bloco anônimo. Para resolver isto, caso seja o desejado, devemos utilizar o AUTONOMOUS_TRANSACTION. Veja como ficaria.

2.JPG

Agora o commit feito na stored procedure não afeta o que acontece na transaction atual, no bloco anônimo. As linha inseridas na procedura, os números de 6 à 10, sofreram o commit, mas não as linhas de 1 à 5 que sofreram um rollback.

Referências

Abraço

Quão útil foi este post ?

Clique em uma estrela para classificar o post

nota média 4.9 / 5. Contagem de votos: 31

Sem votos ! Seja o primeiro a classificar !

1 comentário em “AUTONOMOUS_TRANSACTION: Melhorando a gestão de commits e rollbacks no Oracle”

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress