Ir para conteúdo

POWERED BY:

Arquivado

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

VINICIUS RAMOS

Erro de integridade referencial

Recommended Posts

Em uma procedure, estão sendo feitos dois inserts, porém, ao executar o segundo insert (tabela filho), está ocorrendo erro de integridade referencial pois os dados do primeiro insert (tabela pai) não foram inseridos. Segue abaixo o código simplificado.

CREATE OR REPLACE PROCEDURE PR_XXX (PARÂMETROS) VARIÁVEIS CURSORES BEGIN IF pnSEQ_ASPECTO IS NOT NULL THEN OPEN C_PONTOS_MEDICAO_ASPECTO; FETCH C_PONTOS_MEDICAO_ASPECTO INTO nSEQ_PTMEDICAO, nSEQ_LOCALMEDICAO, nSEQ_CARACMON; WHILE C_PONTOS_MEDICAO_ASPECTO%FOUND LOOP IF (nSEQ_PTMEDICAO <> nSEQ_PT_MEDICAO_OLD) AND (nSEQ_LOCALMEDICAO <> nSEQ_LOCALMEDICAO_OLD) THEN nSEQ_LOCALMON := NULL; PR_ID_001 ('LOCAIS_MONITORADOS', nSEQ_LOCALMON); INSERT INTO LOCAIS_MONITORADOS(SEQ_LOCALMON, SEQ_MONITORAMENTO, SEQ_LOCALMEDICAO, SEQ_PTMEDICAO, DT_COLETA, HR_COLETA, DT_PROX_MON, DT_RESULTADO, CD_AREA, CD_PESSOA, SEQ_ASPECTO) VALUES (nSEQ_LOCALMON, pnSEQ_MONITORAMENTO, nSEQ_LOCALMEDICAO, nSEQ_PTMEDICAO, NULL, NULL, NULL, NULL, psCD_AREA, psCD_PESSOA, pnSEQ_ASPECTO); END IF; INSERT INTO CARACT_LOCAL_MON(SEQ_LOCALMON, SEQ_CARACMON) VALUES (nSEQ_LOCALMON, nSEQ_CARACMON); END LOOP; nSEQ_PT_MEDICAO_OLD := nSEQ_PTMEDICAO; nSEQ_LOCALMEDICAO_OLD := nSEQ_LOCALMEDICAO; FETCH C_PONTOS_MEDICAO_ASPECTO INTO nSEQ_PTMEDICAO, nSEQ_LOCALMEDICAO, nSEQ_CARACMON; CLOSE C_PONTOS_MEDICAO_ASPECTO; END IF; EXCEPTION END;/SHOW ERRORS;

Alguém sabe se tem algum comando para realizar a inserção na tabela logo após a passagem pela instrução de insert?

Compartilhar este post


Link para o post
Compartilhar em outros sites

cuidaddo com testes do tipo :

 

IF (nSEQ_PTMEDICAO <> nSEQ_PT_MEDICAO_OLD) AND (nSEQ_LOCALMEDICAO <> nSEQ_LOCALMEDICAO_OLD) THEN

 

 

e valores nulos , retornam sempre falso

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema não é este. Fiz alguns testes depurando a procedure e retornou true. O problema é que após a passagem pelo primeiro insert, os valores não estão sendo inseridos na tabela LOCAIS_MONITORADOS, causando erro de integridade referencial, pois só poderá inserir na tabela CARACT_LOCAL_MON se já estiver inserido em LOCAIS_MONITORADOS.

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.