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


Responder a