sql >> Base de Datos >  >> RDS >> Oracle

Función de Oracle:replicar wm_concat

¿Recibe un mensaje de error cuando usa wm_concat? A diferencia de funciones como to_char, es propiedad de wmsys y es posible que necesite usar wmsys.wm_concat para usarlo. (a menos que cree los sinónimos necesarios, por supuesto).

Ahora la pregunta real,

Esta técnica se llama agregación de cadenas.

Puedes encontrar muchas otras alternativas aquí.

http://www.oracle-base.com/articles/ 10g/Técnicas de agregación de cadenas.php Para otros métodos, busque "stragg" en http://asktom.oracle.com Otro enlace útil:http://www.orafaq.com/node/2290

Esta es probablemente la más utilizada. Muchos equipos escriben sus propias funciones personalizadas que más o menos hacen lo mismo.

CREATE OR REPLACE FUNCTION get_employees (p_deptno  in  emp.deptno%TYPE)
  RETURN VARCHAR2
IS
  l_text  VARCHAR2(32767) := NULL;
BEGIN
  FOR cur_rec IN (SELECT ename FROM emp WHERE deptno = p_deptno) LOOP
    l_text := l_text || ',' || cur_rec.ename;
  END LOOP;
  RETURN LTRIM(l_text, ',');
END;
/
SHOW ERRORS

Si bien esta solución funciona para varchar2 y number, la mejor solución genérica se puede crear mediante la interfaz agregada de Oracle ODCIA.

http://download-west .oracle.com/docs/cd/B14117_01/appdev.101/b10800/dciaggfns.htm#sthref462

La implementación del mismo se encuentra en el primer enlace anterior en www.oracle-base.com