Boa noite colegas

Estou com um problema aqui, talvez os mais experientes possam me dar alguma 
dica.

Tenho uma tabela que possui um campo numérico (vlr_rateio). Então criei uma 
trigger nessa tabela que faz uma distribuição de um valor pelos itens nesse 
campo .
Por exemplo, a tabela tem 3 linhas. Ao incluir, salvar ou excluir na tabela, eu 
pego um valor (150 por exemplo) e faço uma distribuição pelos itens da tabela 
(na 1ª linha recebe 20, na segunda 80 e na terceira 50).

É aí que eu recebo o erro de tabela mutante. Entendo que é uma situação meio 
sem lógica, pois a cada alteração eu chamaria a trigger que faz mais uma 
alteração, fazendo um loop infinito.

Só que acontece que essa distribuição acontece em uma situação específica 
(apenas quando altero algumas colunas). 
Então eu fiz um "IF" na trigger para só chamar essa distribuição quando 
alteradas essas colunas. Assim, quando eu rodo o update da distribuição, não 
entra nesse IF, e não deveria dar problema.
Sei que isso funciona, pois tenho o mesmo procedimento em outro SGBD.

Só que no Oracle não está funcionando, e acusa que a tabela é mutante.
Pesquisando na internet, descobri a declaração "pragma autonomous_transaction", 
que acabou fazendo funcionar essa parte da distribuição (mas preciso dar um 
commit no final da trigger).
Mas então está dando conflitos (deadlock) quando atualizo campos dessa tabela 
por uma outra trigger (da tabela pai).
Acho que talvez por causa do commit, não sei.

Agradeço desde já qualquer ajuda ou sugestão.
Abraços

Fabio Schunig



[As partes desta mensagem que não continham texto foram removidas]

Responder a