GARANTIR DESCONTO

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;


Fabio Colli

Fabio Colli

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar