Vamos a mais um post rápido sobre PL/SQL. Agora com um exemplo simples do uso do pragma autonomous_transaction que nada mais é que uma forma de isolar uma transação de outra.
No caso faremos um teste simples usando insert,commit e rollback.Mas por ele podemos tirar as conclusões que precisamos e entender como isolar uma transação .
Lets' go!
Criando a tabela para o teste :
- Criando a procedure 2 que contém o pragma autonomous_transaction
- Criando a procedure 1 que fará a chamada da procedure 2
Agora vamos executar a procedure 1.
Lembrando que o objetivo é isolar a transação da procedure 2.
Ok!
Conclusão
Usando o pragma autonomous_transaction podemos ver que dentro da procedure prc_tst_auto a primeira transação foi iniciada com o update 1 e depois finalizada com commit e que outra inicia-se no update 2 .Podemos ver que a transação 2 mesmo com a execução do commit na procedure prc_tst_auto2 após o update 3 não foi alterada(como mostra a imagem).
Coloquei um rollback no meio do código da procedure 1 para o exemplo seguinte em que mostra que sem o pragma autonomous_transaction não é possével dar rollback no update 2.Podemos perceber que no código da procedure 1 não existe commit após o update 2 portanto olhando para somente este código em si vemos que "poderíamos " fazer um undo desta transação.Porém isso é ilusão!
Veja :
- Atualizando o código da procedure 2 retirando o pragma
Vamos executar para comprovar o que foi dito acima :
Certo!Mesmo com rollback no código da procedure 1 para o update 2 a execução da procedure 2 força o commit na transação que começou na primeira procedure.
Entendidos?
No comments:
Post a Comment