Re: [oracle_br] Tabela Mutante

2013-07-23 Por tôpico Jales Jose Moraes
Obrigado, a solução encontrada foi via package mesmo...





 De: Fabio Prado 
Para: oracle_br@yahoogrupos.com.br 
Enviadas: Segunda-feira, 22 de Julho de 2013 23:31
Assunto: Re: [oracle_br] Tabela Mutante
 

Jales, no link http://glufke.net/oracle/viewtopic.php?t=96 você encontrará
a solução!

[]s


Em 22 de julho de 2013 20:08, Jales Jose Moraes
escreveu:

> **
>
>
> Sim fábio, estou tentando colocar uma outra trigger (dessa vez after, numa
> tentativa de resolver a questão). Você tem alguma idéia?
>
> 
> De: Fabio Prado 
> Para: oracle_br@yahoogrupos.com.br
> Enviadas: Segunda-feira, 22 de Julho de 2013 19:52
> Assunto: Re: [oracle_br] Tabela Mutante
>
>
> dentro da trigger você está tentando alterar dados da mesma tabela?
>
> Em 22 de julho de 2013 19:03, Jales Jose Moraes
> escreveu:
>
> > **
> >
> >
> > Boa noite!
> >
> > Senhores estou tendo erro de tabela mutante da seguinte forma:
> >
> > Foi me passada uma nova regra onde ao inserir um novo registro, é para
> > setar o registro antigo (update) com uma status 'N' e o novo registro com
> > um status 'S'.
> >
> > Bom, fiz um cursor na trigger para localizar o registro antigo com base
> em
> > uma número sequencial que é comum a ambos os registros, fiz o update e
> logo
> > após o insert e então ganhei o erro abaixo:
> >
> >  ORA-04091: a tabela SMS_FNDE.S_FINANC é mutante; talvez o gatilho/função
> > não possa localizá-la ORA-06512: em "SMS.A_IUD", line 197 ORA-04088: erro
> > durante a execução do gatilho 'SMS.A_IUD' ORA-06512: em "SMS.A_IUD", line
> > 197 ORA-04088: erro durante a execução do gatilho 'SMS.A_IUD'
> >
> > Como resolver esta situação?
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
> --
> Fábio Prado
> www.fabioprado.net
> "Compartilhando conhecimentos e treinando profissionais em Bancos de Dados
> Oracle"
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 
>
> --
> >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
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Fábio Prado
www.fabioprado.net
"Compartilhando conhecimentos e treinando profissionais em Bancos de Dados
Oracle"


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





--
>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

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



Re: [oracle_br] Tabela Mutante

2013-07-22 Por tôpico Fabio Prado
Jales, no link http://glufke.net/oracle/viewtopic.php?t=96 você encontrará
a solução!

[]s


Em 22 de julho de 2013 20:08, Jales Jose Moraes
escreveu:

> **
>
>
> Sim fábio, estou tentando colocar uma outra trigger (dessa vez after, numa
> tentativa de resolver a questão). Você tem alguma idéia?
>
> 
> De: Fabio Prado 
> Para: oracle_br@yahoogrupos.com.br
> Enviadas: Segunda-feira, 22 de Julho de 2013 19:52
> Assunto: Re: [oracle_br] Tabela Mutante
>
>
> dentro da trigger você está tentando alterar dados da mesma tabela?
>
> Em 22 de julho de 2013 19:03, Jales Jose Moraes
> escreveu:
>
> > **
> >
> >
> > Boa noite!
> >
> > Senhores estou tendo erro de tabela mutante da seguinte forma:
> >
> > Foi me passada uma nova regra onde ao inserir um novo registro, é para
> > setar o registro antigo (update) com uma status 'N' e o novo registro com
> > um status 'S'.
> >
> > Bom, fiz um cursor na trigger para localizar o registro antigo com base
> em
> > uma número sequencial que é comum a ambos os registros, fiz o update e
> logo
> > após o insert e então ganhei o erro abaixo:
> >
> >  ORA-04091: a tabela SMS_FNDE.S_FINANC é mutante; talvez o gatilho/função
> > não possa localizá-la ORA-06512: em "SMS.A_IUD", line 197 ORA-04088: erro
> > durante a execução do gatilho 'SMS.A_IUD' ORA-06512: em "SMS.A_IUD", line
> > 197 ORA-04088: erro durante a execução do gatilho 'SMS.A_IUD'
> >
> > Como resolver esta situação?
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
> --
> Fábio Prado
> www.fabioprado.net
> "Compartilhando conhecimentos e treinando profissionais em Bancos de Dados
> Oracle"
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 
>
> --
> >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
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Fábio Prado
www.fabioprado.net
"Compartilhando conhecimentos e treinando profissionais em Bancos de Dados
Oracle"


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





--
>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:
oracle_br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html




Re: [oracle_br] Tabela Mutante

2013-07-22 Por tôpico Alexandre
Jales,
Porque você precisa fazer isso por trigger? Não da pra gravar o valor
correto no inicio do processo? Na inserção do registro?

Se não tiver jeito use o comando abaixo dentro da trigger que esta dando
erro.

pragma autonomous_transaction

Pelo que você descreveu, fazer isso fica mais pra gambiarra. Um motivo pra
você usar essa solução seria a impossibilidade de alterar o programa que
usa a base.

Alexandre
21 81990595
Em 22/07/2013 20:14, "Jales Jose Moraes"  escreveu:

> **
>
>
> Sim fábio, estou tentando colocar uma outra trigger (dessa vez after, numa
> tentativa de resolver a questão). Você tem alguma idéia?
>
> 
> De: Fabio Prado 
> Para: oracle_br@yahoogrupos.com.br
> Enviadas: Segunda-feira, 22 de Julho de 2013 19:52
> Assunto: Re: [oracle_br] Tabela Mutante
>
>
> dentro da trigger você está tentando alterar dados da mesma tabela?
>
> Em 22 de julho de 2013 19:03, Jales Jose Moraes
> escreveu:
>
> > **
> >
> >
> > Boa noite!
> >
> > Senhores estou tendo erro de tabela mutante da seguinte forma:
> >
> > Foi me passada uma nova regra onde ao inserir um novo registro, é para
> > setar o registro antigo (update) com uma status 'N' e o novo registro com
> > um status 'S'.
> >
> > Bom, fiz um cursor na trigger para localizar o registro antigo com base
> em
> > uma número sequencial que é comum a ambos os registros, fiz o update e
> logo
> > após o insert e então ganhei o erro abaixo:
> >
> >  ORA-04091: a tabela SMS_FNDE.S_FINANC é mutante; talvez o gatilho/função
> > não possa localizá-la ORA-06512: em "SMS.A_IUD", line 197 ORA-04088: erro
> > durante a execução do gatilho 'SMS.A_IUD' ORA-06512: em "SMS.A_IUD", line
> > 197 ORA-04088: erro durante a execução do gatilho 'SMS.A_IUD'
> >
> > Como resolver esta situação?
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
> --
> Fábio Prado
> www.fabioprado.net
> "Compartilhando conhecimentos e treinando profissionais em Bancos de Dados
> Oracle"
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 
>
> --
> >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
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


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





--
>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:
oracle_br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html




Re: [oracle_br] Tabela Mutante

2013-07-22 Por tôpico Jales Jose Moraes
Sim fábio, estou tentando colocar uma outra trigger (dessa vez after, numa 
tentativa de resolver a questão). Você tem alguma idéia?




 De: Fabio Prado 
Para: oracle_br@yahoogrupos.com.br 
Enviadas: Segunda-feira, 22 de Julho de 2013 19:52
Assunto: Re: [oracle_br] Tabela Mutante
 

dentro da trigger você está tentando alterar dados da mesma tabela?


Em 22 de julho de 2013 19:03, Jales Jose Moraes
escreveu:

> **
>
>
> Boa noite!
>
> Senhores estou tendo erro de tabela mutante da seguinte forma:
>
> Foi me passada uma nova regra onde ao inserir um novo registro, é para
> setar o registro antigo (update) com uma status 'N' e o novo registro com
> um status 'S'.
>
> Bom, fiz um cursor na trigger para localizar o registro antigo com base em
> uma número sequencial que é comum a ambos os registros, fiz o update e logo
> após o insert e então ganhei o erro abaixo:
>
>  ORA-04091: a tabela SMS_FNDE.S_FINANC é mutante; talvez o gatilho/função
> não possa localizá-la ORA-06512: em "SMS.A_IUD", line 197 ORA-04088: erro
> durante a execução do gatilho 'SMS.A_IUD' ORA-06512: em "SMS.A_IUD", line
> 197 ORA-04088: erro durante a execução do gatilho 'SMS.A_IUD'
>
> Como resolver esta situação?
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Fábio Prado
www.fabioprado.net
"Compartilhando conhecimentos e treinando profissionais em Bancos de Dados
Oracle"


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





--
>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

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



Re: [oracle_br] Tabela Mutante

2013-07-22 Por tôpico Fabio Prado
dentro da trigger você está tentando alterar dados da mesma tabela?


Em 22 de julho de 2013 19:03, Jales Jose Moraes
escreveu:

> **
>
>
> Boa noite!
>
> Senhores estou tendo erro de tabela mutante da seguinte forma:
>
> Foi me passada uma nova regra onde ao inserir um novo registro, é para
> setar o registro antigo (update) com uma status 'N' e o novo registro com
> um status 'S'.
>
> Bom, fiz um cursor na trigger para localizar o registro antigo com base em
> uma número sequencial que é comum a ambos os registros, fiz o update e logo
> após o insert e então ganhei o erro abaixo:
>
>  ORA-04091: a tabela SMS_FNDE.S_FINANC é mutante; talvez o gatilho/função
> não possa localizá-la ORA-06512: em "SMS.A_IUD", line 197 ORA-04088: erro
> durante a execução do gatilho 'SMS.A_IUD' ORA-06512: em "SMS.A_IUD", line
> 197 ORA-04088: erro durante a execução do gatilho 'SMS.A_IUD'
>
> Como resolver esta situação?
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Fábio Prado
www.fabioprado.net
"Compartilhando conhecimentos e treinando profissionais em Bancos de Dados
Oracle"


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





--
>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:
oracle_br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html




Re: [oracle_br] Tabela Mutante

2013-07-22 Por tôpico Milton Bastos Henriquis Jr.
Cole o código do trigger aqui no e-mail.



2013/7/22 Jales Jose Moraes 

> **
>
>
> Boa noite!
>
> Senhores estou tendo erro de tabela mutante da seguinte forma:
>
> Foi me passada uma nova regra onde ao inserir um novo registro, é para
> setar o registro antigo (update) com uma status 'N' e o novo registro com
> um status 'S'.
>
> Bom, fiz um cursor na trigger para localizar o registro antigo com base em
> uma número sequencial que é comum a ambos os registros, fiz o update e logo
> após o insert e então ganhei o erro abaixo:
>
>  ORA-04091: a tabela SMS_FNDE.S_FINANC é mutante; talvez o gatilho/função
> não possa localizá-la ORA-06512: em "SMS.A_IUD", line 197 ORA-04088: erro
> durante a execução do gatilho 'SMS.A_IUD' ORA-06512: em "SMS.A_IUD", line
> 197 ORA-04088: erro durante a execução do gatilho 'SMS.A_IUD'
>
> Como resolver esta situação?
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


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





--
>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:
oracle_br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html




[oracle_br] Tabela Mutante

2013-07-22 Por tôpico Jales Jose Moraes
Boa noite!

Senhores estou tendo erro de tabela mutante da seguinte forma:

Foi me passada uma nova regra onde ao inserir um novo registro, é para setar o 
registro antigo (update) com uma status 'N' e o novo registro com um status 'S'.

Bom, fiz um cursor na trigger para localizar o registro antigo com base em uma 
número sequencial que é comum a ambos os registros, fiz o update e logo após o 
insert e então ganhei o erro abaixo:

 ORA-04091: a tabela SMS_FNDE.S_FINANC é mutante; talvez o gatilho/função não 
possa localizá-la ORA-06512: em "SMS.A_IUD", line 197 ORA-04088: erro durante a 
execução do gatilho 'SMS.A_IUD' ORA-06512: em "SMS.A_IUD", line 197 ORA-04088: 
erro durante a execução do gatilho 'SMS.A_IUD'

Como resolver esta situação?


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



Re: [oracle_br] Tabela mutante (ORA-04091)

2008-10-31 Por tôpico Fabio
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: 
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




Re: [oracle_br] Tabela mutante (ORA-04091)

2008-10-29 Por tôpico [EMAIL PROTECTED]
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




Re: [oracle_br] Tabela mutante (ORA-04091)

2008-10-29 Por tôpico Ricardo Portilho Proni
O deadlock ocorre porque são duas sessões tentando alterar a mesma
coisa. Não use essa pragma para fugir desta situação.
Esta lógica deve estar antes, em uma procedure, na que faz o DML na
tabela.

Uma trigger destas não deve ser usada, pois vc está alterando algo que
está sendo alterada.


Ricardo Portilho Proni
Coordenador de Bancos de Dados - Solvo S/A
- Oracle Database 10g Administrator Certified Professional (OCP)
- Microsoft Certified Professional (MCP)
- Microsoft Certified Technologt Specialist: SQL Server 2005 (MCTS)

http://portilho.profissionaloracle.com.br




Em Qua, 2008-10-29 às 20:23 -0200, Fabio 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]
> 
> 
> 
> 
> 
>  


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



[oracle_br] Tabela mutante (ORA-04091)

2008-10-29 Por tôpico Fabio
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]



RES: [oracle_br] Tabela Mutante!

2007-12-01 Por tôpico Josir Gomes
Olá pessoal, deixa eu deixar os meus 2 centavos na discussão:

na GRANDE maioria das vezes que eu vi situações de "mutating" era uma 
falha na modelagem. Faça uma revisão na modelagem desta estrutura e veja 
se ela está nas formas normais, etc. Porque ao se alterar um registro, 
vc tem setar outros para nulo ?? Não conheço o seu modelo, estou apenas 
abrindo as possibilidades...

Assumindo que o seu modelo está correto ou caso vc não tenha permissão 
ou não possa alterar o modelo:

1) Solução PRAGMA AUTONOMOUS_TRANSACTION na trigger

Eu acho esta solução uma aberração e deveria ser banida do Oracle!!! :)
Primeiro porque eu colocar COMMIT em uma trigger ou até mesmo em uma 
procedure/package é um tiro no pé. Só se deve colocar COMMIT no 
front-end ou em casos batch na rotina mais externa. Qualquer outra opção 
fora disso, é problema certo a longo prazo.

No caso específico da sua trigger, imagine a situação: vc dá o update e 
chama a transação autonoma que seta nulo os campos. Mais a frente, o 
usuário dá rollback ou acontece um outro erro. Qual o resultado: os 
atributos ficaram com nulo e o resto dos registros envolvidos voltaram a 
posição inicial... A sua modelagem irá aceitar isso??

2) Solução aceitável:

- Crie uma tabela temporária CP_TEMP que conterá os registros que vc 
terá que alterar
- Na trigger, apenas insira os registros que comandarão o SET NULL
INSERT INTO CP_TEMP VALUES ( :NEW.cd_lancam, :NEW.nr_anolot, 
:NEW.cd_lote );
- Crie uma trigger AFTER STATEMENT que irá chamar a procedure MarcaNulo()

- A procedure MarcaNulo() irá consultar a tabela e remover os registros 
desejados:

  begin
 for c1 in (SELECT * FROM CP_TEMP) loop
 UPDATE Cpbaidup
 SET Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
  Where cd_lancam = c1.cd_lancam And nr_anolot = 
c1.nr_anolot And cd_lote = c1.cd_lote;
 end loop;
  end;

O AFTER STATEMENT também poderá dar erro de mutating caso os registros 
alterados sejam os mesmos que vc acabou de alterar.
Neste caso, vc terá que usar JOBS mas aí a solução é mais complexa 
Se não funcionar me fale.

Boa Sorte,
Josir.


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



Re: RES: [oracle_br] Tabela Mutante!

2007-11-30 Por tôpico nunodetorres
Sim.. esse "pensamento lógico" eu ja tive tanto é que já coloquei em minha
pergunta a causa do erro o que gostaria de saber é como contornar esse
tipo de problema, ou seja, em um trigger atualizar outros registros da
mesma tabela sem 
que ocorra esse tipo de erro mutante, ou loop infinito ?
 
Grato!


--- Em oracle_br@yahoogrupos.com.br, "Bruno Lorenzini"
<[EMAIL PROTECTED]> escreveu
>
> Vamos pensar lógicamente...
> 
>  
> 
> Você altera a sua tabela. Ela dispara a trigger... oq a trigger faz?
> 
>  
> 
> A trigger altera a tabela... oq uma alteração na sua tabela faz?
Dispara a
> trigger...
> 
>  
> 
> Oq a trigger faz? Altera a tabela...
> 
>  
> 
> E assim vai...
> 
>  
> 
>  
> 
> É isso que significa sua tabela ser "mutante" rs :D
> 
>  
> 
> Ainda bem que a o Oracle identifica esse tipo de coisa e dispara
esse erro.
> 
>  
> 
> Abs,
> 
>  
> 
>   _  
> 
> De: oracle_br@yahoogrupos.com.br
[mailto:[EMAIL PROTECTED] Em
> nome de nunodetorres
> Enviada em: sexta-feira, 30 de novembro de 2007 15:05
> Para: oracle_br@yahoogrupos.com.br
> Assunto: [oracle_br] Tabela Mutante!
> 
>  
> 
> Boa Tarde a todos!
> 
> Estou com um grande problema com um trigger.
> 
> É o seguinte:
> 
> Possuo um trigger, onde nela tenho que atualizar a propria tabela
> onde o trigger esta vinculado, e esse trigger é Before On
> Uptade And Delete. 
> 
> No entanto quando atualizo um registro nesta tabela me retorna um erro
> dizendo: "conflito detectado ao aguardar recurso" creio que seja 
> porque quando atualizo o campo despara o trigger e como dentro desse
> trigger tem um update, dai entra em um loop ...
> 
> Código da Trigger:
> 
> DECLARE
> V_ROW NUMBER(10);
> V_ENTRA NUMBER(1);
> Pragma Autonomous_Transaction;
> BEGIN
> Update Cpbaidup Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
> Where cd_lancam = :NEW.cd_lancam
> And nr_anolot = :NEW.nr_anolot
> And cd_lote = :NEW.cd_lote;
> end if;
> End if;
> END;
> 
> Gostaria de saber se possui uma outra maneira em que quando 
> atualizar um determinado registro dessa tabela atualize outros campos
> dessa mesma tabela.
> 
> Não sei se me fiz entender.
> 
> Agradeço a todos.
> 
> Abraço!
> 
>  
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




RE: [oracle_br] Tabela Mutante!

2007-11-30 Por tôpico Luiz Ribeiro
Companheiro,

 

Tente fazer ao invés do update o seguinte:

 

:new.cd_lancam := Null;

:new.nr_anolot := Null;

:new.cd_lote := null;

 

[]s

 



From: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] On Behalf Of 
Marcelo
Sent: sexta-feira, 30 de novembro de 2007 16:21
To: oracle_br@yahoogrupos.com.br
Subject: RES: [oracle_br] Tabela Mutante!

 

Acho que faltou você declarar um COMMIT, pois você está usando PRAGRMA
AUTONOMOUS_TRANSACTION.



Marcelo Alberto Lauschner 
Tecnologia e Sistemas
Auto Pratense Ltda 
* - Fone: (0XX54) 3242-3615
* - Fax: (0XX54) 3242-3648
* - E-mail: mailto:[EMAIL PROTECTED] 
<mailto:marcelo%40autopratense.com.br> >
[EMAIL PROTECTED] <mailto:marcelo%40autopratense.com.br> 
* - WWW: www.autopratense.com.br http://www.autopratense.com.br/ 
<http://www.autopratense.com.br/> > 
_ 

De: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>  
[mailto:oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> ] 
Em
nome de nunodetorres
Enviada em: sexta-feira, 30 de novembro de 2007 16:05
Para: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> 
Assunto: [oracle_br] Tabela Mutante!

Boa Tarde a todos!

Estou com um grande problema com um trigger.

É o seguinte:

Possuo um trigger, onde nela tenho que atualizar a propria tabela
onde o trigger esta vinculado, e esse trigger é Before On
Uptade And Delete. 

No entanto quando atualizo um registro nesta tabela me retorna um erro
dizendo: "conflito detectado ao aguardar recurso" creio que seja 
porque quando atualizo o campo despara o trigger e como dentro desse
trigger tem um update, dai entra em um loop ...

Código da Trigger:

DECLARE
V_ROW NUMBER(10);
V_ENTRA NUMBER(1);
Pragma Autonomous_Transaction;
BEGIN
Update Cpbaidup Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
Where cd_lancam = :NEW.cd_lancam
And nr_anolot = :NEW.nr_anolot
And cd_lote = :NEW.cd_lote;
end if;
End if;
END;

Gostaria de saber se possui uma outra maneira em que quando 
atualizar um determinado registro dessa tabela atualize outros campos
dessa mesma tabela.

Não sei se me fiz entender.

Agradeço a todos.

Abraço!


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

 



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



RES: [oracle_br] Tabela Mutante!

2007-11-30 Por tôpico HENRIQUIS Milton
Sim Bruno, vc está certo, porém, o que o colega deseja
fazer é que a trigger seja disparada quando se altera um
certo campo, e então atualizar um outro campo.
Portanto, o raciocínio lógico dele está correto.
 
Nonodetorres:
Acesse essa página:
 
http://www.psoug.org/reference/table_trigger.html
 
E procure pelo texto:
"Mutating Trigger Fix With Autonomous Transaction"
 
 
Não sei se o seu caso tem solução, mas leia, veja
se consegue entender, e tente pra v er se dá certo.
 

Milton Bastos Henriquis Junior

Oracle Database Administrator

 

 

-Mensagem original-
De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de 
Bruno Lorenzini
Enviada em: sexta-feira, 30 de novembro de 2007 17:25
Para: oracle_br@yahoogrupos.com.br
Assunto: RES: [oracle_br] Tabela Mutante!



Vamos pensar lógicamente...

Você altera a sua tabela. Ela dispara a trigger... oq a trigger faz?

A trigger altera a tabela... oq uma alteração na sua tabela faz? 
Dispara a
trigger...

Oq a trigger faz? Altera a tabela...

E assim vai...

É isso que significa sua tabela ser "mutante" rs :D

Ainda bem que a o Oracle identifica esse tipo de coisa e dispara esse 
erro.

Abs,

_ 

De: oracle_br@yahoogrupos.com.br 
<mailto:oracle_br%40yahoogrupos.com.br>  [mailto:oracle_br@yahoogrupos.com.br 
<mailto:oracle_br%40yahoogrupos.com.br> ] Em
nome de nunodetorres
Enviada em: sexta-feira, 30 de novembro de 2007 15:05
Para: oracle_br@yahoogrupos.com.br 
<mailto:oracle_br%40yahoogrupos.com.br> 
    Assunto: [oracle_br] Tabela Mutante!

Boa Tarde a todos!

Estou com um grande problema com um trigger.

É o seguinte:

Possuo um trigger, onde nela tenho que atualizar a propria tabela
onde o trigger esta vinculado, e esse trigger é Before On
Uptade And Delete. 

No entanto quando atualizo um registro nesta tabela me retorna um erro
dizendo: "conflito detectado ao aguardar recurso" creio que seja 
porque quando atualizo o campo despara o trigger e como dentro desse
trigger tem um update, dai entra em um loop ...

Código da Trigger:

DECLARE
V_ROW NUMBER(10);
V_ENTRA NUMBER(1);
Pragma Autonomous_Transaction;
BEGIN
Update Cpbaidup Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
Where cd_lancam = :NEW.cd_lancam
And nr_anolot = :NEW.nr_anolot
And cd_lote = :NEW.cd_lote;
end if;
End if;
END;

Gostaria de saber se possui uma outra maneira em que quando 
atualizar um determinado registro dessa tabela atualize outros campos
dessa mesma tabela.

Não sei se me fiz entender.

Agradeço a todos.

Abraço!

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



 



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



RES: [oracle_br] Tabela Mutante!

2007-11-30 Por tôpico Bruno Lorenzini
Sem commit o máximo que poderia acontecer seria um DEAD LOCK... não é o
caso.

 

Sds,

 

  _  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Marcelo
Enviada em: sexta-feira, 30 de novembro de 2007 15:21
Para: oracle_br@yahoogrupos.com.br
Assunto: RES: [oracle_br] Tabela Mutante!

 

Acho que faltou você declarar um COMMIT, pois você está usando PRAGRMA
AUTONOMOUS_TRANSACTION.



Marcelo Alberto Lauschner 
Tecnologia e Sistemas
Auto Pratense Ltda 
* - Fone: (0XX54) 3242-3615
* - Fax: (0XX54) 3242-3648
* - E-mail: mailto:[EMAIL PROTECTED]
<mailto:marcelo%40autopratense.com.br> e.com.br>
[EMAIL PROTECTED] <mailto:marcelo%40autopratense.com.br> e.com.br
* - WWW: www.autopratense.com.br http://www.autoprat
<http://www.autopratense.com.br/> ense.com.br/> 
_ 

De: [EMAIL PROTECTED] <mailto:oracle_br%40yahoogrupos.com.br> os.com.br
[mailto:[EMAIL PROTECTED] <mailto:oracle_br%40yahoogrupos.com.br>
os.com.br] Em
nome de nunodetorres
Enviada em: sexta-feira, 30 de novembro de 2007 16:05
Para: [EMAIL PROTECTED] <mailto:oracle_br%40yahoogrupos.com.br> os.com.br
Assunto: [oracle_br] Tabela Mutante!

Boa Tarde a todos!

Estou com um grande problema com um trigger.

É o seguinte:

Possuo um trigger, onde nela tenho que atualizar a propria tabela
onde o trigger esta vinculado, e esse trigger é Before On
Uptade And Delete. 

No entanto quando atualizo um registro nesta tabela me retorna um erro
dizendo: "conflito detectado ao aguardar recurso" creio que seja 
porque quando atualizo o campo despara o trigger e como dentro desse
trigger tem um update, dai entra em um loop ...

Código da Trigger:

DECLARE
V_ROW NUMBER(10);
V_ENTRA NUMBER(1);
Pragma Autonomous_Transaction;
BEGIN
Update Cpbaidup Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
Where cd_lancam = :NEW.cd_lancam
And nr_anolot = :NEW.nr_anolot
And cd_lote = :NEW.cd_lote;
end if;
End if;
END;

Gostaria de saber se possui uma outra maneira em que quando 
atualizar um determinado registro dessa tabela atualize outros campos
dessa mesma tabela.

Não sei se me fiz entender.

Agradeço a todos.

Abraço!


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

 



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



RES: [oracle_br] Tabela Mutante!

2007-11-30 Por tôpico Marcelo
Acho que faltou você declarar um COMMIT, pois você está usando PRAGRMA
AUTONOMOUS_TRANSACTION.
 
 
 
Marcelo Alberto Lauschner 
Tecnologia e Sistemas
Auto Pratense Ltda 
* - Fone: (0XX54) 3242-3615
* - Fax: (0XX54) 3242-3648
* - E-mail:  mailto:[EMAIL PROTECTED]>
[EMAIL PROTECTED]
* - WWW: www.autopratense.com.br http://www.autopratense.com.br/> 
  _  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de nunodetorres
Enviada em: sexta-feira, 30 de novembro de 2007 16:05
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Tabela Mutante!
 
Boa Tarde a todos!

Estou com um grande problema com um trigger.

É o seguinte:

Possuo um trigger, onde nela tenho que atualizar a propria tabela
onde o trigger esta vinculado, e esse trigger é Before On
Uptade And Delete. 

No entanto quando atualizo um registro nesta tabela me retorna um erro
dizendo: "conflito detectado ao aguardar recurso" creio que seja 
porque quando atualizo o campo despara o trigger e como dentro desse
trigger tem um update, dai entra em um loop ...

Código da Trigger:

DECLARE
V_ROW NUMBER(10);
V_ENTRA NUMBER(1);
Pragma Autonomous_Transaction;
BEGIN
Update Cpbaidup Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
Where cd_lancam = :NEW.cd_lancam
And nr_anolot = :NEW.nr_anolot
And cd_lote = :NEW.cd_lote;
end if;
End if;
END;

Gostaria de saber se possui uma outra maneira em que quando 
atualizar um determinado registro dessa tabela atualize outros campos
dessa mesma tabela.

Não sei se me fiz entender.

Agradeço a todos.

Abraço!
 


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



RES: [oracle_br] Tabela Mutante!

2007-11-30 Por tôpico Bruno Lorenzini
Vamos pensar lógicamente...

 

Você altera a sua tabela. Ela dispara a trigger... oq a trigger faz?

 

A trigger altera a tabela... oq uma alteração na sua tabela faz? Dispara a
trigger...

 

Oq a trigger faz? Altera a tabela...

 

E assim vai...

 

 

É isso que significa sua tabela ser “mutante” rs :D

 

Ainda bem que a o Oracle identifica esse tipo de coisa e dispara esse erro.

 

Abs,

 

  _  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de nunodetorres
Enviada em: sexta-feira, 30 de novembro de 2007 15:05
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Tabela Mutante!

 

Boa Tarde a todos!

Estou com um grande problema com um trigger.

É o seguinte:

Possuo um trigger, onde nela tenho que atualizar a propria tabela
onde o trigger esta vinculado, e esse trigger é Before On
Uptade And Delete. 

No entanto quando atualizo um registro nesta tabela me retorna um erro
dizendo: "conflito detectado ao aguardar recurso" creio que seja 
porque quando atualizo o campo despara o trigger e como dentro desse
trigger tem um update, dai entra em um loop ...

Código da Trigger:

DECLARE
V_ROW NUMBER(10);
V_ENTRA NUMBER(1);
Pragma Autonomous_Transaction;
BEGIN
Update Cpbaidup Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
Where cd_lancam = :NEW.cd_lancam
And nr_anolot = :NEW.nr_anolot
And cd_lote = :NEW.cd_lote;
end if;
End if;
END;

Gostaria de saber se possui uma outra maneira em que quando 
atualizar um determinado registro dessa tabela atualize outros campos
dessa mesma tabela.

Não sei se me fiz entender.

Agradeço a todos.

Abraço!

 



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



[oracle_br] Tabela Mutante!

2007-11-30 Por tôpico nunodetorres
Boa Tarde a todos!

Estou com um grande problema com um trigger.

É o seguinte:

Possuo um trigger, onde nela tenho que atualizar a propria tabela
onde o trigger esta vinculado, e esse trigger é Before On
Uptade And Delete. 

No entanto quando atualizo um registro nesta tabela me retorna um erro
dizendo: "conflito detectado ao aguardar recurso" creio que seja 
porque quando atualizo o campo despara o trigger e como dentro desse
trigger tem um update, dai entra em um loop ...

Código da Trigger:

DECLARE
   V_ROW   NUMBER(10);
   V_ENTRA NUMBER(1);
   Pragma Autonomous_Transaction;
BEGIN
  Update Cpbaidup Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
  Where cd_lancam = :NEW.cd_lancam
And nr_anolot = :NEW.nr_anolot
 And cd_lote = :NEW.cd_lote;
  end if;
   End if;
END;

Gostaria de saber se possui uma outra maneira em que quando 
atualizar um determinado registro dessa tabela atualize outros campos
dessa mesma tabela.

Não sei se me fiz entender.

Agradeço a todos.

Abraço!





Res: [oracle_br] Tabela Mutante !

2007-05-17 Por tôpico Alexsandro Pereira
Junior,

o
que houve foi que no trigger for statement, você colocou
pkg_caixa.v_contador no índice do vetor quando deveria colocar a
variável v_ind do Loop. Comentei a parte do seu código e coloquei a
minha abaixo. Veja agora, Alexsandro.

--
--  VETOR
--

PACKAGE pkg_caixa IS
   TYPE caixa IS RECORD (
  cd_empres fccaixa.cd_empres%TYPE
 ,nr_lancxa fccaixa.nr_lancxa%TYPE
 ,nr_anocxa fccaixa.nr_anocxa%TYPE
   );

   TYPE t_caixa IS TABLE OF caixa
  INDEX BY BINARY_INTEGER;

   v_caixa   t_caixa;
   v_contadorBINARY_INTEGER := 0;
END;

-- TRIGGER PASSA VALORES PARA VETOR

CREATE OR REPLACE TRIGGER tr_atuctb_cx
   AFTER DELETE OR UPDATE
   ON fccaixa
   REFERENCING NEW AS NEW OLD AS OLD
   FOR EACH ROW
DECLARE
   dvalorNUMBER (14, 2);
   irow  NUMBER (10);
BEGIN
-->
   IF :OLD.cd_lancam IS NOT NULL THEN
-->
  pkg_caixa.v_contador   := pkg_caixa.v_contador + 1;
  pkg_caixa.v_caixa (pkg_caixa.v_contador).cd_empres := :OLD.cd_empres;
  pkg_caixa.v_caixa (pkg_caixa.v_contador).nr_lancxa := :OLD.nr_lancxa;
  pkg_caixa.v_caixa (pkg_caixa.v_contador).nr_anocxa := :OLD.nr_anocxa;
   END IF;
END;

-- TRIGGER GRAVA NA TABELA DA TRIGGER

CREATE OR REPLACE TRIGGER tr_limcam_cxa
   AFTER DELETE OR UPDATE OF nr_lancxa, cd_empres, nr_anocxa
   ON fccaixa
   REFERENCING NEW AS NEW OLD AS OLD
DECLARE
   v_count   NUMBER (7);
BEGIN
   FOR v_ind IN 1 .. pkg_caixa.v_contador LOOP
  UPDATE fccaixa
 SET cd_lancam = NULL
,cd_lote = NULL
,nr_anolot = NULL
   WHERE cd_empres = pkg_caixa.v_caixa (v_ind).cd_empres

 AND nr_lancxa = pkg_caixa.v_caixa (v_ind).nr_lancxa

 AND nr_anocxa = pkg_caixa.v_caixa (v_ind).nr_anocxa;


--   WHERE cd_empres = pkg_caixa.v_caixa (pkg_caixa.v_contador).cd_empres
-- AND nr_lancxa = pkg_caixa.v_caixa (pkg_caixa.v_contador).nr_lancxa
-- AND nr_anocxa = pkg_caixa.v_caixa (pkg_caixa.v_contador).nr_anocxa;
   END LOOP;

-->
   pkg_caixa.v_contador   := 0;
END;


- Mensagem original 
De: Junior <[EMAIL PROTECTED]>
Para: [EMAIL PROTECTED]
Enviadas: Quinta-feira, 17 de Maio de 2007 9:15:04
Assunto: Re: [oracle_br] Tabela Mutante !



 

Bom Dia AlexSandro !

 

 

Cara ... eu segui as tuas dicas e a principio 
eu estou conseguindo gravar no vetor ...

Criei uma trigger do tipo EACH ROW, e 
uma outra do tipo STATMENT, para

ler o vetor e gravar...

Só que a trigger do tipo EACH ROW  esta executando certo, porém a do 
tipo

STATMENT, não executa Tu sabe me dizer se tem alguma conflito, 
algo

de errado, ou se falta algo 

 

Segue a trigger's:

 

Desde já Agradeço!

 

--

  VETOR

--

PACKAGE PKG_CAIXA 
IS 


TYPE CAIXA IS 
RECORD 

(CD_EMPRES FCCAIXA.CD_EMPRES %type

,NR_LANCXA FCCAIXA.NR_LANCXA %type

,NR_ANOCXA FCCAIXA.NR_ANOCXA %type);

TYPE t_CAIXA IS 
TABLE OF CAIXA

INDEX BY BINARY_INTEGER; 

V_CAIXA T_CAIXA;

V_CONTADOR BINARY_INTEGER 
:= 0;

END; 




TRIGGER PASSA VALORES PARA VETOR




CREATE OR REPLACE TRIGGER tr_atuctb_cx

AFTER

DELETE OR UPDATE

ON fccaixa

REFERENCING NEW AS NEW OLD AS OLD

FOR EACH ROW

DECLARE

dValor Number(14,2);

iRow Number(10);

BEGIN

-->

If :Old.CD_LANCAM 
Is Not Null Then

-->

PKG_CAIXA.v_contador := 
PKG_CAIXA.v_contador + 1;

PKG_CAIXA.V_CAIXA(PKG_CAIXA.V_CONTADOR).CD_EMPRES := :Old.CD_EMPRES;

PKG_CAIXA.V_CAIXA(PKG_CAIXA.V_CONTADOR).NR_LANCXA := :Old.NR_LANCXA;

PKG_CAIXA.V_CAIXA(PKG_CAIXA.V_CONTADOR).NR_ANOCXA := :Old.NR_ANOCXA;



End If;

END;


 



TRIGGER GRAVA NA TABELA DA TRIGGER




CREATE OR REPLACE TRIGGER tr_limcam_cxa

AFTER

DELETE OR UPDATE OF nr_lancxa, cd_empres, nr_anocxa

ON fccaixa

REFERENCING NEW AS NEW OLD AS OLD

DECLARE 

v_count number(7); 


BEGIN 

FOR v_ind IN 
1..PKG_CAIXA.v_contador LOOP

Update FCCAIXA Set CD_LANCAM = Null, CD_LOTE = Null, NR_ANOLOT = 
Null

Where CD_EMPRES = PKG_CAIXA.V_CAIXA(PKG_CAIXA.v_contador).CD_EMPRES

And NR_LANCXA = PKG_CAIXA.V_CAIXA(PKG_CAIXA.v_contador).NR_LANCXA

And NR_ANOCXA = PKG_CAIXA.V_CAIXA(PKG_CAIXA.v_contador).NR_ANOCXA;

END LOOP;

-->

PKG

Res: [oracle_br] Tabela Mutante !

2007-05-16 Por tôpico Alexsandro Pereira
Amigo,

na realidade, você não vai conseguir executar a operação desejada. O que 
fazemos é guardar em um array a identificação do registro para ser processada 
depois. Num trigger for each row, populo o array e num trigger after statement 
leio o array e faço as atualizações. As alterações podem ser feitas no segundo 
trigger. Eu cortei boa parte do texto dos triggers mas acho que dá para você 
ter uma idéia.

Att,
Alexsandro Pereira.


- Mensagem original 
De: nunodetorres <[EMAIL PROTECTED]>
Para: oracle_br@yahoogrupos.com.br
Enviadas: Quarta-feira, 16 de Maio de 2007 17:15:25
Assunto: [oracle_br] Tabela Mutante !









  



Boa Tarde Pessoal!



Tenho um trigger onde estou atualizando um registro na mesma tabela da 

trigger, e esta exibindo a seguinte mensagem de erro. 



ORA-2: -4091 (PR_DOCUMENTOS_ 002) ORA-04091: a tabela 

SAUDEAD600.DOCUMENT OS é mutante; talvez o gatilho/função não possa 

localizá-la



Porém, na procedure foi declarado o comando PRAGMA 

AUTONOMOUS_TRANSACT ION. 



Preciso de mais alguma coisa para poder executar essa procedure sem 

erros? ou se tiverem alguma outra sugestão será bem vinda?



Abraço a todos! 






  















__
Fale com seus amigos  de graça com o novo Yahoo! Messenger 
http://br.messenger.yahoo.com/ 
  --

CREATE  OR REPLACE PACKAGE K_MNT_OFA IS

-- Autor: Erick Pacheco
-- Data : 04/02/2000
-- Finalidade: Gerar variáveis de trabalho para os triggers
-- TG_OFA_01 e TG_OFA_02.

TYPE oficina IS RECORD 
 (cd_materialv_material_impl.cd_material  %type
 ,cd_material_nhav_material_impl.cd_material  %type
 ,cd_unidade_apoiada v_unidades_aer_brasil.cd_unidade %type
 ,cd_oficina_apoio   t_oficina_apoio.cd_oficina_apoio %type);

TYPE t_oficina IS TABLE OF oficina
 INDEX BY BINARY_INTEGER;

v_oficina   t_oficina;
v_contador  BINARY_INTEGER := 0;
END;
/

  --

CREATE OR REPLACE TRIGGER TG_OFA_01
BEFORE INSERT OR UPDATE
OF IN_GERENTE, CD_MATERIAL_NHA, CD_UNIDADE_APOIO, CD_UNIDADE_SETOR
ON T_OFICINA_APOIO
FOR EACH ROW

DECLARE
  v_in_conj_comp  varchar2(1);

BEGIN
   
   --- PROGRAMA  : TG_OFA_01.TXT---
   --- DATA  : 04/02/2000   ---
   
   if :new.cd_materialis not null and
  :new.cd_material_nhais not null and
  :new.cd_unidade_apoiada is not null then

 K_MNT_OFA.v_contador := K_MNT_OFA.v_contador + 1;

 if INSERTING or UPDATING then

   K_MNT_OFA.v_oficina(K_MNT_OFA.v_contador).cd_material   
:= :new.cd_material;

   K_MNT_OFA.v_oficina(K_MNT_OFA.v_contador).cd_material_nha   
:= :new.cd_material_nha;

   K_MNT_OFA.v_oficina(K_MNT_OFA.v_contador).cd_unidade_apoiada
 := :new.cd_unidade_apoiada;

   K_MNT_OFA.v_oficina(K_MNT_OFA.v_contador).cd_oficina_apoio  
   := :new.cd_oficina_apoio;
 end if;
   end if;

--**--**--**--
END;

/   


  --

CREATE OR REPLACE TRIGGER TG_OFA_02 
  AFTER INSERT OR UPDATE 
  OF CD_MATERIAL, CD_MATERIAL_NHA, CD_UNIDADE_APOIADA
  ON T_OFICINA_APOIO

DECLARE
   v_count number(7);

BEGIN
   
   --- PROGRAMA  : TG_OFA_02.TXT---
   --- DATA  : 04/02/2000   ---
   --- DEFINICAO : ALEXSANDRO SOARES---
   --- CONSTRUCAO: ERICK PACHECO---
   --- DESCRICAO : loop para correr através do array dos---
   --- registros manipulados---
   
   -MANUTENCOES
   --- DATA   : ---
   --- SOLICITACAO: ---
   --- CONSTRUCAO : ---
   --- DESCRICAO  : ---
   

   FOR v_ind IN 1..K_MNT_OFA.v_contador
   LOOP 
 select count(1)
 into  v_count
 from  t_oficina_apoio ofa
 where ofa.cd_oficina_apoio <>
  K_MNT_OFA.v_oficina(K_MNT_OFA.v_contador).cd_oficina_apoio
 and  ofa.cd_material = 
  K_MNT_OFA.v_oficina(K_MNT_OFA.v_contador).cd_material
 and  ofa.cd_

[oracle_br] Tabela Mutante !

2007-05-16 Por tôpico nunodetorres
Boa Tarde Pessoal!

Tenho um trigger onde estou atualizando um registro na mesma tabela da 
trigger, e esta exibindo a seguinte mensagem de erro. 

ORA-2: -4091 (PR_DOCUMENTOS_002) ORA-04091: a tabela 
SAUDEAD600.DOCUMENTOS é mutante; talvez o gatilho/função não possa 
localizá-la

Porém, na procedure foi declarado o comando PRAGMA 
AUTONOMOUS_TRANSACTION. 

Preciso de mais alguma coisa para poder executar essa procedure sem 
erros? ou se tiverem alguma outra sugestão será bem vinda?

Abraço a todos!