Tuesday, January 05, 2010

Usando o pragma autonomous_transaction

Olá classe,

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: