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

Tércio Costa

Tércio Costa

Tércio Costa, formado em Ciências da Computação em 2013 pela UFPB. Tenho experiência em Servidores Windows Server, Linux e banco de dados Oracle desde 2008 juntamente com os seus serviços. Desde então venho aperfeiçoando os meus conhecimentos em produtos Oracle e Sistemas Operacionais. Tenho experiência também em bancos SQL Server, MySQL e PosrgreSQL além da linguagem de programação Java, onde desenvolvi projetos freelance utilizando banco de dados Oracle XE e Java SE.

Mantenho o Blog https://oraclepress.wordpress.com reconhecido pela Oracle Technology Network OTN, onde também sou articulista e sou certificado Oracle Database SQL Certified Expert!

Comentário(s) da Comunidade

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