A maneira como você está criando a trigger está errada. Veja:

===========================================================================================

SQL> create table teste_trigger( COD_PRODUTO NUMBER(10,0)
  2  ,
  3  DES_PRODUTO  VARCHAR2(30)
  4  , DT_ATUALIZACAO                            DATE
  5  ,DT_INSERCAO                               DATE
  6  )
  7  ;

Table created.

SQL> CREATE OR REPLACE TRIGGER trigger_upd
  2  AFTER UPDATE
  3  ON teste_trigger
  4  REFERENCING NEW AS NEW OLD AS OLD
  5  FOR EACH ROW
  6  BEGIN
  7     UPDATE teste_trigger
  8        SET dt_atualizacao = SYSDATE
  9      WHERE cod_produto = :OLD.cod_produto; 
 10  END; 
 11  /

Trigger created.

SQL> 
SQL> insert into teste_trigger (COD_PRODUTO,DES_PRODUTO) values (1,'x');

1 row created.

SQL> select * from teste_trigger;

COD_PRODUTO DES_PRODUTO                    DT_ATUALIZACAO    DT_INSERCAO
----------- ------------------------------ ----------------- -----------------
          1 x

1 row selected.

SQL> update teste_trigger set DES_PRODUTO='y' where COD_PRODUTO=1;
update teste_trigger set DES_PRODUTO='y' where COD_PRODUTO=1
       *
ERROR at line 1:
ORA-04091: a tabela TESTE_TRIGGER é mutante; talvez o gatilho/função não possa 
localizá-la
ORA-06512: em "TRIGGER_UPD", line 2
ORA-04088: erro durante a execução do gatilho 'TRIGGER_UPD'


SQL> CREATE OR REPLACE TRIGGER trigger_upd
  2  BEFORE UPDATE
  3  ON teste_trigger
  4  REFERENCING NEW AS NEW OLD AS OLD
  5  FOR EACH ROW
  6  BEGIN
  7      :NEW.DT_ATUALIZACAO := sysdate; 
  8  END; 
  9  /

Trigger created.

SQL> 
SQL> update teste_trigger set DES_PRODUTO='y' where COD_PRODUTO=1;

1 row updated.

SQL> select * from teste_trigger;

COD_PRODUTO DES_PRODUTO                    DT_ATUALIZACAO    DT_INSERCAO
----------- ------------------------------ ----------------- -----------------
          1 y                              24-AGO-2006 09:53

1 row selected.

===========================================================================================
 
Veja que na trigger eu troquei o evento por BEFORE UPDATE, e ao invés de um 
UPDATE, simplesmente disse que o valor novo é SYSDATE.

[]s

Eduardo Claro

-----Original Message-----
From: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] On Behalf Of Léo 
Vieira
Sent: Thursday, August 24, 2006 8:42 AM
To: oracle_br@yahoogrupos.com.br
Subject: [oracle_br] Trigger de atualização e inserção.

Bom dia Grupo,

tenho a seguinte tabela de teste:

NAME                            Null?     Type
------------------------------- --------- -----
COD_PRODUTO                     NOT NULL  NUMBER(10,0)
DES_PRODUTO                     NOT NULL  VARCHAR2(30)
DT_ATUALIZACAO                            DATE
DT_INSERCAO                               DATE

Quero criar duas triggers que façam o seguinte:
1 - Ao atualizar o registro é colocado sysdate na coluna DT_ATUALIZACAO
2 - Ao inserir um registro é colocado sysdate nas colunas DT_ATUALIZACAO e 
DT_INSERCAO.

Criei a seguinte trigger para UPDATE:

CREATE OR REPLACE TRIGGER trigger_upd
AFTER UPDATE
ON teste_trigger
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
   UPDATE teste_trigger
      SET dt_atualizacao = SYSDATE
    WHERE cod_produto = :OLD.cod_produto; END; /

Porém quando atualizo registro nada acontece, o que tem de errado?
E para alterar a trigger para fazer a de inserção? 

Obrigado a todos

Leonardo Baliano








--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________

OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: 
http://www.oraclebr.com.br/ 
__________________________________________________________________
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine 
Links do Yahoo! Grupos




 




--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________

OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: 
http://www.oraclebr.com.br/
__________________________________________________________________
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine  
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