lkey 0 Denunciar post Postado Agosto 6, 2008 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
lkey 0 Denunciar post Postado Agosto 6, 2008 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
Motta 645 Denunciar post Postado Agosto 6, 2008 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
Cesar Augusto Alcancio 0 Denunciar post Postado Fevereiro 7, 2013 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_INATIVABEFORE 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