Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lkey

[Resolvido] ORA-04091

Recommended Posts

Ola Pessoal,

 

Tenho a seguinte trigger que acusa o erro ORA-04091

 

create or replace

TRIGGER ILHA.TR_INATIVA

BEFORE INSERT ON ILHA.TBMAIL FOR EACH ROW

 

 

 

BEGIN

 

UPDATE ILHA.TBMAIL

SET IDMAIL = 3

WHERE NUMEROINF = :NEW.NUMEROINF

AND IDMAIL = 0

AND DATAHORA < :NEW.DATAHORA;

 

 

END;

 

Alguem sabe como resolver...??

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Pessoal,

 

Tenho a seguinte trigger que acusa o erro ORA-04091

 

create or replace

TRIGGER ILHA.TR_INATIVA

BEFORE INSERT ON ILHA.TBMAIL FOR EACH ROW

 

 

 

BEGIN

 

UPDATE ILHA.TBMAIL

SET IDMAIL = 3

WHERE NUMEROINF = :NEW.NUMEROINF

AND IDMAIL = 0

AND DATAHORA < :NEW.DATAHORA;

 

 

END;

 

Alguem sabe como resolver...??

 

Abs

 

Ja achei..

 

 

Declare

Pragma Autonomous_Transaction;

 

 

Podem trancar o topico ou excluir..

 

obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só completado, sei que está é dúvida comum e pode ajudar alguém.

 

ORA-04091 table string.string is mutating, trigger/function may not see it

 

Cause: A trigger (or a user defined PL/SQL function that is referenced in this statement) attempted to look at (or modify) a table that was in the middle of being modified by the statement which fired it.

 

Action: Rewrite the trigger (or function) so it does not read that table.

 

 

fonte http://download.oracle.com/docs/cd/B10501_...100.htm#1002387

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para esclarecer:

Esse erro ocorre quando há uma tentativa de manipular/consultar a tabela que acionou a Trigger.

Não é necessário reescrever o código como foi dito acima, basta adicionar a linha de código que o "lkey" citou no seu exemplo:

 

CREATE OR REPLACE TRIGGER ILHA.TR_INATIVA
BEFORE INSERT ON ILHA.TBMAIL FOR EACH ROW

Declare
Pragma Autonomous_Transaction;
BEGIN

UPDATE ILHA.TBMAIL
SET IDMAIL = 3
WHERE NUMEROINF = :NEW.NUMEROINF
AND IDMAIL = 0
AND DATAHORA < :NEW.DATAHORA;
END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.