Buenos días rocka8613:
Hasta ahora no encontrado otra forma de hacer esto más que con cursores. Supongamos que tenemos una consulta
Código SQL:
Ver originalSELECT Nombre FROM Autor WHERE idautor = 1
y esta consulta te regresa lo siguiente:
Código:
Nombre
-----------------
Octavio Paz
Mario Vargas Llosa
Gabriel García Márquez
Puedes hacer esto:
Código SQL:
Ver originalSELECT ConcatenarRegistros('Select Nombre from Autor where idautor = 1') AS Autor FROM dual;
Y la función te regresa lo siguiente:
Código:
Autor
-----------------
Octavio Paz, Mario Vargas Llosa, Gabriel García Márquez
Es decir, los tres registros unidos en un solo renglón separados por comas.
La función para hacer esto es la siguiente:
Código SQL:
Ver originalFUNCTION ConcatenarRegistros(consulta IN VARCHAR2) RETURN VARCHAR2 IS
v_regreso VARCHAR2(4000);
v_elemento VARCHAR2(4000);
v_cursor sys_refcursor;
BEGIN
OPEN v_cursor FOR consulta;
LOOP
FETCH v_cursor INTO v_elemento;
EXIT WHEN v_cursor%NOTFOUND;
IF v_regreso IS NULL THEN
v_regreso := v_elemento;
ELSE
v_regreso := v_regreso || ', ' || v_elemento;
END IF;
END LOOP;
RETURN v_regreso;
END;
La función es muy sencilla y no tiene validaciones, así es que puede ser que tengas que hacer alguna adecuación adicional, pero espero que te pueda servir de algo.
Saludos.
Leo.