Grande Marcio! Fiz alguns testes iniciais, e realmente essa é uma solução muito boa! Vou continuar aqui com minha luta contra meus poucos conhecimentos em Oracle. ;) Meu muito obrigado, ajudou muito.
Abraços Fabio Schunig ----- Original Message ----- From: "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> To: <oracle_br@yahoogrupos.com.br> Sent: Wednesday, October 29, 2008 10:29 PM Subject: Re: [oracle_br] Tabela mutante (ORA-04091) > 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 >> >> __________________________________________________ Faça ligações para outros computadores com o novo Yahoo! Messenger http://br.beta.messenger.yahoo.com/ ------------------------------------ -------------------------------------------------------------------------------------------------------------------------- >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