Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal,
Estou com o seguinte problema, criei essa trigger para incluir um registro em uma tabela secundaria que tem como FK o registro da primaria, ja tentei executar a trigger em BEFORE e AFTER mas em ambos os casos o insert executado ocorre o "At end of table" pois o registro da primaria ainda não foi gravado.
Alguma sugestão para esse erro...
>
CREATE OR REPLACE TRIGGER TRG_INC_TGFCAB_COG
AFTER INSERT
ON TGFCAB
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
ERROMSG VARCHAR2(255);
ERROR EXCEPTION;
V_M3 FLOAT;
P_QTDNEG NUMBER;
P_CODPROD NUMBER;
P_PESOLIQ FLOAT;
P_PESOBRUTO FLOAT;
P_PESOLIQTOT FLOAT;
P_PESOBRUTOTOT FLOAT;
P_NUNOTA INT;
P_TEMPROD INT;
P_SEQ INT;
P_DHTIPVENDA DATE;
CURSOR C1 IS SELECT *
FROM TGFITE
WHERE NUNOTA = P_NUNOTA
AND USOPROD = 'M'
AND CODPROD = 10056;
BEGIN
P_TEMPROD := 0;
P_SEQ := 1;
IF INSERTING THEN
IF :NEW.CODTIPOPER = 36 THEN
COMMIT;
BEGIN
SELECT NUNOTA INTO P_NUNOTA
FROM TGFCAB CAB
WHERE NUMNOTA = NVL(TO_NUMBER(SUBSTR(:NEW.OBSERVACAO,17,10)),0)
AND CODEMP = 3
AND CODTIPOPER = 9;
EXCEPTION
WHEN NO_DATA_FOUND THEN
P_TEMPROD := 0;
END;
BEGIN
SELECT DISTINCT 1 INTO P_TEMPROD FROM TGFITE WHERE NUNOTA = P_NUNOTA AND USOPROD = 'M';
EXCEPTION
WHEN NO_DATA_FOUND THEN
P_TEMPROD := 0;
END;
IF P_TEMPROD = 1 THEN
FOR R1 IN C1
LOOP
BEGIN
INSERT INTO TGFITE (NUTAB,NUNOTA,SEQUENCIA,CODEMP,CODPROD,CODLOCALORIG,CONTROLE,USOPROD,CODCFO,QTDNEG,QTDENTREGUE,QTDCONFERIDA,VLRUNIT,VLRTOT,
VLRCUS,BASEIPI,VLRIPI,ALIQIPI,BASEICMS,ALIQICMS,VLRDESC,BASESUBSTIT,VLRSUBST,PENDENTE,CODVOL,CODTRIB,ATUALESTOQUE,OBSERVACAO,
RESERVA,STATUSNOTA,CODEXEC,CODVEND,FATURAR,CODOBSPADRAO,VLRREPRED,VLRDESCBONIF,PERCDESC,M3,ALIQICMSRED,CODPARCEXEC,CODUSU,DTALTER,
CUSTO,BASESUBSTSEMRED,SOLCOMPRA,ATUALESTTERC,TERCEIROS,CSTIPI,QTDWMS)
VALUES
(R1.NUTAB,:NEW.NUNOTA,R1.SEQUENCIA,R1.CODEMP,R1.CODPROD,R1.CODLOCALORIG,R1.CONTROLE,R1.USOPROD,R1.CODCFO,R1.QTDNEG,R1.QTDENTREGUE,R1.QTDCONFERIDA,0,0,
R1.VLRCUS,R1.BASEIPI,R1.VLRIPI,R1.ALIQIPI,R1.BASEICMS,R1.ALIQICMS,R1.VLRDESC,R1.BASESUBSTIT,R1.VLRSUBST,R1.PENDENTE,R1.CODVOL,R1.CODTRIB,0,R1.OBSERVACAO,
R1.RESERVA,R1.STATUSNOTA,R1.CODEXEC,R1.CODVEND,R1.FATURAR,R1.CODOBSPADRAO,R1.VLRREPRED,R1.VLRDESCBONIF,R1.PERCDESC,R1.M3,R1.ALIQICMSRED,R1.CODPARCEXEC,R1.CODUSU,R1.DTALTER,
R1.CUSTO,R1.BASESUBSTSEMRED,R1.SOLCOMPRA,R1.ATUALESTTERC,R1.TERCEIROS,R1.CSTIPI,R1.QTDWMS);
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20001, 'não encontrado');
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, 'erro: '||SQLERRM);
END;
/*
INSERT INTO TGFVAR (NUNOTA, SEQUENCIA, NUNOTAORIG, SEQUENCIAORIG, QTDATENDIDA, CUSATEND, ORDEMPROD,
STATUSNOTA, FIXACAO)
VALUES
(:NEW.NUNOTA, P_SEQ, R1.NUNOTA, R1.SEQUENCIA, R1.QTDNEG, NULL, NULL, 'A', NULL);
*/
P_SEQ := P_SEQ +1;
END LOOP;
COMMIT;
END IF;
END IF;
END IF;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR(-20101, ERROMSG);
END TRG_INC_TGFCAB_COG;
/
Carregando comentários...