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: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Léo
Vieira
Sent: Thursday, August 24, 2006 8:42 AM
To: [email protected]
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/[email protected]/
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________
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/[email protected]/
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________
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