/**
 * Lista em uma string os ramos de atividade da regra de adesão
 * 
 * @param {Varchar2} P_NRADESAOCARDBASE Número da regra de adesão
 * revisada
 */
CREATE OR REPLACE FUNCTION RAMO_ADESAO(P_NRADESAOCARDBASE IN NUMBER) RETURN VARCHAR2
AS
   V_RAMOS VARCHAR2(1000);
BEGIN
   V_RAMOS := '';
   FOR C_RAMOS IN
   (SELECT DISTINCT AC.DSATIVCLI
      FROM ATIVCLIADESAOCBASE A
           INNER JOIN ATIVCLISEGMER ATS ON ATS.NRATIVCLISEGMER = A.NRATIVCLISEGMER
           INNER JOIN ATIVCLIENTE AC ON AC.CDATIVCLI = ATS.CDATIVCLI
     WHERE A.NRADESAOCARDBASE = P_NRADESAOCARDBASE
     ORDER BY AC.DSATIVCLI) LOOP
      --Separador de valores
      IF LENGTH(V_RAMOS) > 0 THEN
         V_RAMOS := V_RAMOS || ', ';
      END IF;
      -- Terminador caso limite tenha sido atingido
      IF LENGTH(V_RAMOS) + LENGTH(C_RAMOS.DSATIVCLI) > 1000 THEN         
         V_RAMOS := V_RAMOS || SUBSTR(C_RAMOS.DSATIVCLI, 1, 995) || '(...)';
      ELSE
         V_RAMOS := V_RAMOS || C_RAMOS.DSATIVCLI;
      END IF;
   END LOOP;
   RETURN V_RAMOS;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('RAMO_ADESAO','6.35.009'); END;
/
