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.