create or replace
PROCEDURE CUSTO_HABILIDADE
       (P_CDFILIAL     IN ORDPRODUCAO.CDFILIAL%TYPE,
        P_NRORDPROD    IN ORDPRODUCAO.NRORDPROD%TYPE,
        P_NRSUBORDPROD IN ORDPRODUCAO.NRSUBORDPROD%TYPE,
        P_CDHABILIDADE IN HABILIDADE.CDHABILIDADE%TYPE,
        P_NRAPRCUSTOP  IN APRCUSTOP.NRAPRCUSTOP%TYPE,
        P_CDETAPAPROD  IN APRCUSTOP.CDETAPAPROD%TYPE) IS

V_VRCUSTORAT    FLOAT;
V_QTAPRCUSTOP   FLOAT;
V_VRAPRCUSTOP   FLOAT;
V_QTHRAPRCUST  FLOAT;

BEGIN
    FOR C_CUSTOS IN
   (SELECT CDHABILIDADE, CDCUSTOHAB, VRCUSTOHAB
     FROM CUSTOHAB
    WHERE CDHABILIDADE = P_CDHABILIDADE) LOOP

       DELETE FROM CUSTOHABOP
        WHERE CDFILIAL = P_CDFILIAL
          AND NRORDPROD = P_NRORDPROD
          AND NRSUBORDPROD = P_NRSUBORDPROD
          AND CDHABILIDADEOP = C_CUSTOS.CDHABILIDADE
          AND CDCUSTOHABOP = C_CUSTOS.CDCUSTOHAB;

       SELECT SUM(QTAPRCUSTOP), SUM(VRAPRCUSTOP), SUM(QTHRAPRCUST)
         INTO V_QTAPRCUSTOP, V_VRAPRCUSTOP, V_QTHRAPRCUST
         FROM APRCUSTOP
        WHERE CDFILIAL     = P_CDFILIAL
          AND NRORDPROD    = P_NRORDPROD     
          AND NRSUBORDPROD = P_NRSUBORDPROD
          AND CDAPRCUSTOP  = C_CUSTOS.CDHABILIDADE
          AND CDFUNCUSTO = '002';

       V_VRCUSTORAT := (100*((C_CUSTOS.VRCUSTOHAB*NVL(V_QTHRAPRCUST,0))*NVL(V_QTAPRCUSTOP,1)))/V_VRAPRCUSTOP;
       V_VRCUSTORAT := (V_VRAPRCUSTOP*V_VRCUSTORAT)/100;

       INSERT INTO CUSTOHABOP
       (CDFILIAL, NRAPRCUSTOP, CDHABILIDADEOP, CDCUSTOHABOP, NRORDPROD, NRSUBORDPROD, VRCUSTOHABOP, CDETAPAPROD)
       VALUES
       (P_CDFILIAL, P_NRAPRCUSTOP, C_CUSTOS.CDHABILIDADE, C_CUSTOS.CDCUSTOHAB, P_NRORDPROD, P_NRSUBORDPROD, V_VRCUSTORAT, P_CDETAPAPROD);

    END LOOP;


END;
/