PL/SQL: Agrupar concatenando

Para concatenar cadenas de diferentes filas de un grupo devueltas a partir de una consulta SQL de forma similar a aplicar count() o max() con números, usamos la función concat_group. De esta forma reducimos la cantidad de filas a una única.

Sus parámetros son dos:
 * Un cursor sobre una consulta SQL para tomar la columna con la cadena a concatenar
 * Una cadena que se usara como separador

Ejemplo:
select concat_group(cursor(
 select to_char(nombre)
 from usuarios 
where rownum < 400));

Limitación: La cadena devuelta está limitada a 32760 caracteres que es la cantidad máxima de bytes que permite el tipo varchar2.


create or replace function concat_group(
p_cursor in sys_refcursor, 
p_separador varchar2 default ' ')
is return varchar2
  salida varchar2(32760);
  cadena varchar2(32760);
begin
  loop fetch p_cursor into cadena;
    exit when p_cursor%NOTFOUND;
    salida := salida||p_separador||cadena;
  end loop; 
  close p_cursor;
  return ltrim(substr(salida, length(p_separador), length(salida)));
end;

0 comentarios: