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


Responder a