Fabio, O Oracle não permite que se faça uma alteração na mesma tabela dentro de uma trigger.
O que vc pode fazer é criar uma view dessa tabela e então criar uma trigger instead of para a view que fará a alteração. O link abaixo dá um exemplo de como isso funciona e explica como resolver o problema, inclusive fala sobre o autonomous_transaction e o uso errado dele para resolver esse problema de tabelas mutantes. http://glufke.net/oracle/viewtopic.php?t=96 Espero ter ajudado tks Marcio Fossa Em Wed, 29 Oct 2008 20:23:32 -0200, Fabio <[EMAIL PROTECTED]> escreveu: > 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] > -- Usando o revolucionário cliente de correio do Opera: http://www.opera.com/mail/ ------------------------------------ -------------------------------------------------------------------------------------------------------------------------- >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -------------------------------------------------------------------------------------------------------------------------- >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » >Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: >http://www.oraclebr.com.br/ ------------------------------------------------------------------------------------------------------------------------ Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html