GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

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.

1.JPG

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

– Oracle 12c SQL Reference

Autotransaction Pragma

Autonomous transaction

Abraço

Share

You may also like...

1 Response

  1. Theo disse:

    Otima explicaçao !

Deixe um comentário

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