Bom dia, Gostaria de tirar uma duvida, no Progress 4GL, existe alguma forma de se desenvolver transações com possibilidade de ser realizado um ROLLBACK da transação? Ou é necessário desenvolver toda a rotina de rollback na mão? Obrigado desde já.
kikofr, A linguagem ABL tem um monte de padrões no que diz respeito a blocos e transações. Dependendo a situação e o erro o rollback é automático. Se tudo estiver ok. A naba é que cada tipo de bloco (DO, REPEAT, FOR EACH) funciona diferente. É claro que ninguém lembra de tanta picuinha, isso não fica claro no código. Mas está no manual. Nada como o bom e velho BEGIN TRANSACTION e COMMIT ou ROLLBACK.
Rollback em progress, depende muito do caso. No caso do FOR EACH enquanto ele não chegar no END ele não efetua a alteração. Se existe uma faixa e ocorrer o erro durante, tudo que ficou para trás precisa ser desfeito na mão ou utilizando ON ERROR UNDO, LEAVE. Claro que variáveis e temp-tables não pode estar com NO-UNDO, que fará com que o cliente não armazene todas as interações. Esse processo faz o inverso do programa, gravando todos os passos para desfazer, dependendo do tamanho do código e da faixa de alteração/exclusão afetará muito no desempenho da operação. No caso do DO ele não gera transação no banco, é preciso informar TRANSACTION. Já REPEAT e FOR EACH geram transação.