AUTONOMOUS_TRANSACTION

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

Abraço

1 comentário em “AUTONOMOUS_TRANSACTION”

Deixe um comentário

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detectado !

Verificamos que está usando alguma extensão para bloquear os anúncios. O GPO (Grupo de Profissionais Oracle) obtém a sua renda através dos anúncios, para assim manter toda a estrutura dedicada a universalização do conhecimento.

Se você gosta de nosso trabalho, pedimos por gentileza que desabilite o ads blocker. Trabalhamos somente com o Google Adsense e tentamos ao máximo exibir apenas o necessário.

Agradecemos de antemão ! :)

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock