Fórum Como fazer isso... Estou sem solução #28347
03/02/2006
0
Atualizo um registro na tabela de REMATRICULAS onde existe um trigger(before) que insere um registro na tabela MATRICULAS_PAUTAS e que possui um trigger(before) que insere um registro na tabela MATRICULAS_PAUTAS_MES e insere um registro na tabela NOTAS_ETAPAS_PAUTAS(ainda está executando o trigger), da um update em ALTERACOES_DISCIPLINAS_REMATRI que possui um trigger(before) que chama uma procedure, e esta tenta inserir novamente em MATRICULAS_PAUTAS(antes do trigger acabar a execução), gerando o seguinte erro:Conflito detectado ao aguardar recurso. Nesta procedure eu faço o o que está embaixo : A pergunta é o seguinte, como faço para encontrar o registro que foi inserido na tabela MATRICULAS_PAUTAS antes da trigger acabar sua execução ? Se eu conseguir encontrar o registro que foi inserido(mas ainda não foi comitado) eu consigo resolver o problema. Obrigado, por enquanto.
create or replace procedure AD_INSERE_MATRICULAS_PAUTAS(MATRICULA INTEGER, PAUTA INTEGER) is
BEGIN
DECLARE
EXISTE_REGISTRO INTEGER;
BEGIN
BEGIN
IF (PAUTA IS NOT NULL) THEN
BEGIN
SELECT COUNT(*)
INTO EXISTE_REGISTRO
FROM MATRICULAS_PAUTAS
WHERE COD_MATRICULA = MATRICULA
AND COD_PAUTA = PAUTA;
IF EXISTE_REGISTRO = 0 THEN
BEGIN
INSERT INTO MATRICULAS_PAUTAS_T
(COD_PAUTA, COD_MATRICULA, SIT_MATRICULA_PAUTA, GRUPO_ALUNOS)
VALUES
(PAUTA, MATRICULA, 0, NULL);
END;
END IF;
END;
END IF;
END;
END;
END AD_INSERE_MATRICULAS_PAUTAS;
create or replace procedure AD_INSERE_MATRICULAS_PAUTAS(MATRICULA INTEGER, PAUTA INTEGER) is
BEGIN
DECLARE
EXISTE_REGISTRO INTEGER;
BEGIN
BEGIN
IF (PAUTA IS NOT NULL) THEN
BEGIN
SELECT COUNT(*)
INTO EXISTE_REGISTRO
FROM MATRICULAS_PAUTAS
WHERE COD_MATRICULA = MATRICULA
AND COD_PAUTA = PAUTA;
IF EXISTE_REGISTRO = 0 THEN
BEGIN
INSERT INTO MATRICULAS_PAUTAS_T
(COD_PAUTA, COD_MATRICULA, SIT_MATRICULA_PAUTA, GRUPO_ALUNOS)
VALUES
(PAUTA, MATRICULA, 0, NULL);
END;
END IF;
END;
END IF;
END;
END;
END AD_INSERE_MATRICULAS_PAUTAS;
Fabio Colli
Curtir tópico
+ 0
Responder
Posts
03/02/2006
Motta
Pelo que vi vc fechou um ciclo entre as triggers, fica uma chamada infinita , além do que muito provalvemente vc tomará um erro de ´mutant table´ , acho que vc tem de tirar esta lógica das triggers e coloca-las numa SP que será chamada.
Responder
Gostei + 0
03/02/2006
Fabio Colli
Foi isso mesmo que eu fiz, fiz SP onde passo um parâmetro, este parãmetro diz se é para inserir ou não o registro, consegui resolver, valeu mesmo.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)