Ivan, em tabela que a trigger é dispara, você não pode ter operações DML dentro 
da trigger utilizando a mesma tabela da trigger. A não ser que você utilize o 
PRAGMA_AUTONOMUS, que abriria "outra transação" e te possibilitaria operações 
DMLs da mesma tabela.

Não entendi o que você está fazendo, você está fazendo o Insert do campo antido 
(:OLD.NOME) do cliente? Se for aplicação, você poderia tratar isso direto na 
aplicação.

Márcio.
----- Original Message ----- 

  From: igmeirelles 
  To: oracle_br@yahoogrupos.com.br 
  Sent: Saturday, May 15, 2010 11:47 AM
  Subject: [oracle_br] A tabela SYSTEM.CLIENTES é mutante


    
  Olá a todos... 

  estou iniciando em Oracle e me deparei com um problema ao utilizar triggers.

  criei uma tabela de teste chamada CLIENTES com o campo NOME varchar2(70)... e 
a seguinte TRIGGER:

  CREATE OR REPLACE
  TRIGGER TESTE_TRIGGER 
  BEFORE UPDATE 
  ON "SYSTEM"."CLIENTES"
  FOR EACH ROW 
  BEGIN
  insert into "SYSTEM"."CLIENTES"("NOME") values(:OLD."NOME");
  COMMIT;
  END;

  a Trigger compila normalmente, porém ao alterar um nome na tabela CLIENTES o 
Oracle me retorna o seguinte erro:

  Ocorreu um erro ao salvar alterações na tabela "SYSTEM"."CLIENTES":
  Linha 3: ORA-04091: a tabela SYSTEM.CLIENTES é mutante; talvez o 
gatilho/função não possa localizá-la
  ORA-06512: em "SYSTEM.TESTE_TRIGGER", line 3
  ORA-04088: erro durante a execução do gatilho 'SYSTEM.TESTE_TRIGGER'

  o que estou fazendo de errado??

  desde já agradeço a atenção de todos...
  Ivan Meirelles.



  

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

Responder a