CREATE OR REPLACE FUNCTION CUSTO_PRODUTO_COC(
P_CDFILIAL IN VARCHAR2,
P_CDPRODUTO IN VARCHAR2,
P_DATACUSTO IN DATE,
P_TIPOCUSTO IN NUMBER
) RETURN FLOAT
IS
V_VRCOMLIQ FLOAT;
V_VRCOMBRU FLOAT;
V_VRMEDLIQ FLOAT;
V_VRMEDBRU FLOAT;
BEGIN
   SELECT NVL(MAX(VRULTCLIQAP),0) AS VRCOMLIQ,
          NVL(MAX(VRULTCBRUAP),0) AS VRCOMBRU,
          NVL(MAX(VRMEDLIQAP ),0) AS VRMEDLIQ,
          NVL(MAX(VRMEDBRUAP ),0) AS VRMEDBRU
          INTO V_VRCOMLIQ,V_VRCOMBRU,V_VRMEDLIQ,V_VRMEDBRU
         FROM PRODUTOAP
         WHERE (CDFILIAL   = P_CDFILIAL)  AND
               (CDPRODUTO  = P_CDPRODUTO) AND
               (DTCUSTOAP  = (SELECT MAX(DTCUSTOAP)
                              FROM PRODUTOAP
                              WHERE (CDFILIAL   = P_CDFILIAL)  AND
                                    (CDPRODUTO  = P_CDPRODUTO) AND
                                    (DTCUSTOAP <= P_DATACUSTO)));
   IF P_TIPOCUSTO = 0 THEN
      RETURN ROUND(V_VRMEDBRU, 3);
   ELSIF P_TIPOCUSTO = 1 THEN
      RETURN ROUND(V_VRMEDLIQ, 3);
   ELSIF P_TIPOCUSTO = 2 THEN
      RETURN ROUND(V_VRCOMBRU, 3);
   ELSIF P_TIPOCUSTO = 3 THEN
      RETURN ROUND(V_VRCOMLIQ, 3);
   END IF;
   
   RETURN 0.0;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('CUSTO_PRODUTO_COC','5.85.xxx'); END;
/