CREATE OR REPLACE FUNCTION PROD_FATORCONV_PARA_UNID
(
P_CDPRODUTO VARCHAR2,
P_SGUNIDADE_ATUAL VARCHAR2
) RETURN FLOAT
AS
V_SGUNIDADE VARCHAR2(10);
V_VRFATOCONV FLOAT;
BEGIN
    IF P_SGUNIDADE_ATUAL IS NULL THEN
        RETURN 1;
    END IF;
    
    SELECT MAX(SGUNIDADE)
    INTO V_SGUNIDADE
    FROM PRODUTO WHERE CDPRODUTO = P_CDPRODUTO;
      
    IF V_SGUNIDADE = P_SGUNIDADE_ATUAL THEN
        RETURN 1;
    END IF;
    
    SELECT MAX(VRFATOCONVES)
    INTO V_VRFATOCONV
    FROM CONVPRODUTO
    WHERE CDPRODUTO = P_CDPRODUTO
    AND VRFATOCONVES > 0
    AND SGUNIDADE = P_SGUNIDADE_ATUAL;
    IF V_VRFATOCONV IS NULL THEN
        SELECT MAX(VRFTCONVER)
          INTO V_VRFATOCONV
          FROM CONVUNID
         WHERE SGUNIDPARA = P_SGUNIDADE_ATUAL
           AND VRFTCONVER > 0
           AND SGUNIDDE  = V_SGUNIDADE;
        IF V_VRFATOCONV IS NULL THEN
            RETURN 1;
        ELSE
            RETURN 1/V_VRFATOCONV;
        END IF;
    ELSE
        RETURN V_VRFATOCONV;
    END IF;
END;
/