CREATE OR REPLACE FUNCTION CONSULTA_ALIQREDBCSN(
	P_ENTSAICSOSN     IN CODFISCOPER.IDENTSAICFOP%TYPE,
	P_EMPRESA         IN CODFISCOPER.CDEMPRESA%TYPE,
	P_CDARVPROD       IN PRODUTO.CDARVPROD%TYPE,
	P_INSCESTA        IN CODFISCOPER.CDINSCESTA%TYPE,
  	P_TIPOOPER        IN CODFISCOPER.CDTIPOOPER%TYPE) RETURN FLOAT
   
IS
   V_CDARVPROD     VARCHAR2(20);
   V_CONTADOR      NUMBER;
   V_VRALIQREDBC   FLOAT;
BEGIN
   V_CONTADOR   := 0;
   V_VRALIQREDBC := 0;

   BEGIN
      SELECT MAX(P.CDARVPROD), COUNT(*)
      INTO V_CDARVPROD, V_CONTADOR
      FROM CODFISCOPERSN C, PRODUTO P
      WHERE (IDENTSAICSOSN = P_ENTSAICSOSN)  AND
            (CDEMPRESA    = P_EMPRESA)       AND
            (CDTIPOOPER   = P_TIPOOPER)      AND
            (CDINSCESTA   = P_INSCESTA)      AND
            (C.CDPRODUTO  = P.CDPRODUTO(+))  AND
            (INSTR(P_CDARVPROD,NVL(RTRIM(P.CDARVPROD),P_CDARVPROD)) = 1);
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_CONTADOR  := 0;
         V_CDARVPROD := NULL;
   END;
   
   IF V_CONTADOR > 0 THEN
      IF NOT (V_CDARVPROD IS NULL) THEN
         BEGIN
            SELECT NVL(MAX(VRALIQREDBC), 0)
              INTO V_VRALIQREDBC
              FROM CODFISCOPERSN C, PRODUTO P
             WHERE (C.IDENTSAICSOSN = P_ENTSAICSOSN)
               AND (C.CDEMPRESA    = P_EMPRESA)
               AND (C.CDTIPOOPER   = P_TIPOOPER)
               AND (C.CDINSCESTA   = P_INSCESTA)
               AND (C.CDPRODUTO    = P.CDPRODUTO(+))
               AND (P.CDARVPROD    = V_CDARVPROD);
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_VRALIQREDBC  := 0;
         END;
      ELSIF (V_CDARVPROD IS NULL) THEN
         BEGIN
            SELECT NVL(MAX(VRALIQREDBC), 0)
              INTO V_VRALIQREDBC
              FROM CODFISCOPERSN C
             WHERE (C.IDENTSAICSOSN = P_ENTSAICSOSN)
               AND (C.CDEMPRESA    = P_EMPRESA)
               AND (C.CDTIPOOPER   = P_TIPOOPER)
               AND (C.CDINSCESTA   = P_INSCESTA)
               AND (C.CDPRODUTO IS NULL);
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_VRALIQREDBC  := 0;
         END;
      END IF;
   END IF;   
   RETURN(V_VRALIQREDBC);
END;
/  
