CREATE OR REPLACE FUNCTION CENTCUST_PRODUTO(
   P_CDFILIAL   IN FILIAL.CDFILIAL%TYPE,
   P_CDARVPROD  IN PRODUTO.CDARVPROD%TYPE,
   P_IDENTRSAID IN VARCHAR) RETURN VARCHAR
IS
   V_CDCCUSTENTR CENTCUST.CDCENTCUST%TYPE;
   V_CDCCUSTSAID CENTCUST.CDCENTCUST%TYPE;
   V_CDARVPROD   PRODUTO.CDARVPROD%TYPE;
BEGIN

   BEGIN
      SELECT NVL(CDCCUSTENTRF,''), NVL(CDCCUSTSAIDF,'')
      INTO V_CDCCUSTENTR, V_CDCCUSTSAID
      FROM PRODFILI PF, PRODUTO P
      WHERE PF.CDFILIAL  = P_CDFILIAL
        AND PF.CDPRODUTO = P.CDPRODUTO
        AND P.CDARVPROD  = P_CDARVPROD;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN V_CDCCUSTENTR := NULL;
                              V_CDCCUSTSAID := NULL;
   END;

   IF P_IDENTRSAID = 'E' THEN
      IF V_CDCCUSTENTR IS NULL THEN
         BEGIN
            SELECT CDARVPROD
            INTO V_CDARVPROD
            FROM PRODUTO
            WHERE CDCCUSTENTR IS NOT NULL
              AND P_CDARVPROD LIKE CDARVPROD || '%';
         EXCEPTION
            WHEN NO_DATA_FOUND THEN V_CDARVPROD := NULL;
         END;

         BEGIN
            SELECT CDCCUSTENTR
            INTO V_CDCCUSTENTR
            FROM PRODUTO
            WHERE CDARVPROD = V_CDARVPROD;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN V_CDCCUSTENTR := NULL;
         END;

         IF V_CDCCUSTENTR IS NULL THEN
            BEGIN
               SELECT NVL(F.CDCENTCUST, E.CDCENTCUST)
               INTO V_CDCCUSTENTR
               FROM FILIAL F, EMPRESA E
               WHERE F.CDFILIAL = P_CDFILIAL AND
                     F.CDEMPRESA = E.CDEMPRESA;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN V_CDCCUSTENTR := NULL;
            END;
         END IF;
      END IF;

      RETURN(V_CDCCUSTENTR);
   ELSE
      IF V_CDCCUSTSAID IS NULL THEN
         BEGIN
            SELECT CDARVPROD
            INTO V_CDARVPROD
            FROM PRODUTO
            WHERE CDCCUSTSAID IS NOT NULL
              AND P_CDARVPROD LIKE CDARVPROD || '%';
         EXCEPTION
            WHEN NO_DATA_FOUND THEN V_CDARVPROD := NULL;
         END;

         BEGIN
            SELECT CDCCUSTSAID
            INTO V_CDCCUSTSAID
            FROM PRODUTO
            WHERE CDARVPROD = V_CDARVPROD;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN V_CDCCUSTSAID := NULL;
         END;

         IF V_CDCCUSTSAID IS NULL THEN
            BEGIN
               SELECT NVL(F.CDCENTCUST, E.CDCENTCUST)
               INTO V_CDCCUSTSAID
               FROM FILIAL F, EMPRESA E
               WHERE F.CDFILIAL = P_CDFILIAL AND
                     F.CDEMPRESA = E.CDEMPRESA;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN V_CDCCUSTSAID := NULL;
            END;
         END IF;
      END IF;
      RETURN(V_CDCCUSTSAID);
   END IF;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('CENTCUST_PRODUTO','4.09.090'); END;
/

