Ir para conteúdo

Arquivado

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

Alex Sandro Batista Pereir

trigger em view materializada

Recommended Posts

Bom dia!

 

Alguém já teve problemas com a criação de trigger para uma view materializada ?

 

Eu criei uma TRIGGER para guardar um resumo dos dados da view materializada em uma tabela histórico. Porém após a criação da TRIGGER a VIEW MATERIALIZADA não atualiza mais.

 

segue erro ao tentar força a view com a trigger habilitada:

 

 

Erro ao iniciar na linha 240 no comando

BEGIN DBMS_SNAPSHOT.REFRESH( 'BACKLOG_INC_SLM'); END;

Relatório de erro:

ORA-12008: error in materialized view refresh path

ORA-04091: table KPIOPS.BACKLOG_INC_SLM is mutating, trigger/function may not see it

ORA-06512: at "KPIOPS.ATUALIZA_HISTORICO_INC", line 3

ORA-04088: error during execution of trigger 'KPIOPS.ATUALIZA_HISTORICO_INC'

ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2251

ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2457

ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2426

ORA-06512: at line 1

12008. 00000 - "error in materialized view refresh path"

*Cause: Table SNAP$_<mview_name> reads rows from the view

MVIEW$_<mview_name>, which is a view on the master table

(the master may be at a remote site). Any

error in this path will cause this error at refresh time.

For fast refreshes, the table <master_owner>.MLOG$_<master>

is also referenced.

*Action: Examine the other messages on the stack to find the problem.

See if the objects SNAP$_<mview_name>, MVIEW$_<mview_name>,

<mowner>.<master>@<dblink>, <mowner>.MLOG$_<master>@<dblink>

still exist.

Compartilhar este post


Link para o post
Compartilhar em outros sites
table KPIOPS.BACKLOG_INC_SLM is mutating

 

 

 

A trigger tenta atualizar a própria tabela que a dispara ?

 

Esta trigger é de INSTEAD OF ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, a trigger tenta atualizar uma terceira tabela , ela praticamente leva um resumo dos dados que estão na view materializada.

 

A TRIGGER é AFTER , pois eu preciso do resumo atualizado para table histórico.

 

Código :

CREATE OR REPLACE TRIGGER ATUALIZA_HISTORICO_INC
  AFTER DELETE OR INSERT OR UPDATE ON BACKLOG_INC_SLM
  FOR EACH ROW
  WHEN (new.ATUALIZADO  >  (SYSDATE - (1/60/24)))
DECLARE   
BEGIN
    INSERT INTO HIST_BACKLOG_INC_SLM 
    SELECT TORRE, AREA, MANAGER, FORNECEDOR, REGRA, STATUS, ATUALIZADO, COUNT(*)  QUANTIDADE FROM BACKLOG_INC_SLM GROUP BY TORRE,AREA,MANAGER,FORNECEDOR,REGRA,STATUS,ATUALIZADO;
    COMMIT;
END; 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentou assim (INSTEAD OF) ?

CREATE OR REPLACE TRIGGER ATUALIZA_HISTORICO_INC
INSTEAD OF INSERT ON BACKLOG_INC_SLM
  FOR EACH ROW
  WHEN (new.ATUALIZADO  >  (SYSDATE - (1/60/24)))
DECLARE   
BEGIN
    INSERT INTO HIST_BACKLOG_INC_SLM
    SELECT TORRE, AREA, MANAGER, FORNECEDOR, REGRA, STATUS, ATUALIZADO, COUNT(*)  QUANTIDADE FROM BACKLOG_INC_SLM GROUP BY TORRE,AREA,MANAGER,FORNECEDOR,REGRA,STATUS,ATUALIZADO;
    COMMIT;
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.