Dica sobre controle de transações em AdvPL com Oracle

Hoje trago uma dica útil que foi compartilhada recentemente conosco.

Recentemente, no nosso fórum AdvPLers no Discord, o Alison (LinkedIn), que é especialista em AdvPL, divulgou uma nota importante para quem utiliza controle de transações em AdvPL.

Existem alguns programadores, que criam temporárias dentro do Begin Transaction, e isso em ambientes Oracle causa problema, pois ele entende que a criação dessa tabela não é uma transação de manipulação de dados. E isso acarreta que, se tiver RecLock ou ExecAuto antes dessa temporária, tudo vai ser “commitado” no banco de dados.

Ou seja, sempre que forem utilizar Begin Transaction / End Transaction em AdvPL, evitem criar temporárias dentro desses comandos (exemplo de transação).

Segue abaixo o texto enviado pelo Alison:

Pessoal

Boa tarde

Segue dica super útil

Existe um problema onde temos:

Begin Transaction

…..

….

….

End Transaction

Ao interromper o processo no meio, fazia “meio” rollback, algumas coisas eram comitadas e outras eram feitas o Rollback, no Oracle (Em SQL, POST faz rollback total).

Segue explicação do Framework:

“Isso acontece pq alguma alma caridosa chamou, dentro da transação uma criação de tabela, pode ser temporarytable ou qualquer outra. O ORACLE , se receber um comando de DDL no meio de uma transação, commita todos os dados e continua a vida.

Por isso é importante somente abrir uma transação na hora de gravar, pois se estiver no oracle e chamar um DDL já era.”

Ou seja, não devemos criar tabelas ou qualquer comando de DDL dentro do begin e end.

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta