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 fbifa...@gmail.com
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
malphig...@yahoo.com.brescreveu:

 **


 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 fbifa...@gmail.com
 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
 malphig...@yahoo.com.brescreveu:

  **
 
 
  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 Milton Bastos Henriquis Jr.
Cole o código do trigger aqui no e-mail.



2013/7/22 Jales Jose Moraes malphig...@yahoo.com.br

 **


 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




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
malphig...@yahoo.com.brescreveu:

 **


 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 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 fbifa...@gmail.com
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
malphig...@yahoo.com.brescreveu:

 **


 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 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 malphig...@yahoo.com.br 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 fbifa...@gmail.com
 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
 malphig...@yahoo.com.brescreveu:

  **
 
 
  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 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
malphig...@yahoo.com.brescreveu:

 **


 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 fbifa...@gmail.com
 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
 malphig...@yahoo.com.brescreveu:

  **
 
 
  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 (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: 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




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]



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!

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: BLOCKED::mailto:[EMAIL PROTECTED] 
mailto:marcelo%40autopratense.com.br 
[EMAIL PROTECTED] mailto:marcelo%40autopratense.com.br 
* - WWW: www.autopratense.com.br BLOCKED::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]