Artigo enviado por Wellington Fernandes do CarmoAnalista de Sistemas
Pessoal, na semana passada precisei usar mais um recurso interessante do oracle que novamente compartilho com vocês.
Eu tinha um bloco pl/sql que, apesar de ter alguns delete, insert e update no seu conteúdo, deveria fazer um commit apenas no final da execução, geralmente o processamento é feito em segundos. Acontece que o update, sem um motivo aparente, começou a demorar mais que o normal. Com isso logo veio a pergunta, porque não fazer um commit a cada comando? Considerando o contexto da rotina, o commit a cada comando não seria possível, exceto em um update. Mas como fazer um commit isolado no meio da transação? A resposta é pragma autonomous_transaction;
Funciona apenas dentro de uma procedure, você cria uma procedure e coloca a declaração pragma autonomous_transaction; pronto essa procedure será considerada uma transação a parte, execute o seu comando e execute o commit.
PS: Funciona desde o Oracle 8i
Exemplo
Begin
Insert ......
Delete ......
Chamada da procedure com a transação autônima.......esse pedaço terá um commit a parte
Etc.......
Commit;
End;
Eu tinha um bloco pl/sql que, apesar de ter alguns delete, insert e update no seu conteúdo, deveria fazer um commit apenas no final da execução, geralmente o processamento é feito em segundos. Acontece que o update, sem um motivo aparente, começou a demorar mais que o normal. Com isso logo veio a pergunta, porque não fazer um commit a cada comando? Considerando o contexto da rotina, o commit a cada comando não seria possível, exceto em um update. Mas como fazer um commit isolado no meio da transação? A resposta é pragma autonomous_transaction;
Funciona apenas dentro de uma procedure, você cria uma procedure e coloca a declaração pragma autonomous_transaction; pronto essa procedure será considerada uma transação a parte, execute o seu comando e execute o commit.
PS: Funciona desde o Oracle 8i
Exemplo
Begin
Insert ......
Delete ......
Chamada da procedure com a transação autônima.......esse pedaço terá um commit a parte
Etc.......
Commit;
End;
Nenhum comentário:
Postar um comentário