Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/10/2010, 08:49
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Mostrar relacion muchos a muchos

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 original
  1. SELECT 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 original
  1. SELECT 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 original
  1. FUNCTION ConcatenarRegistros(consulta IN VARCHAR2) RETURN VARCHAR2 IS
  2.   v_regreso  VARCHAR2(4000);
  3.   v_elemento VARCHAR2(4000);
  4.   v_cursor  sys_refcursor;
  5. BEGIN
  6.   OPEN v_cursor FOR consulta;
  7.   LOOP
  8.     FETCH v_cursor INTO v_elemento;
  9.     EXIT WHEN v_cursor%NOTFOUND;
  10.     IF v_regreso IS NULL THEN
  11.       v_regreso := v_elemento;
  12.     ELSE
  13.       v_regreso := v_regreso || ', ' || v_elemento;
  14.     END IF;
  15.   END LOOP;
  16.   RETURN v_regreso;
  17. 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.