Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Funktion:wm_concat replizieren

Erhalten Sie eine Fehlermeldung, wenn Sie wm_concat verwenden? Im Gegensatz zu Funktionen wie to_char gehört es wmsys und Sie müssen möglicherweise wmsys.wm_concat verwenden, um es zu verwenden. (es sei denn, Sie erstellen natürlich die notwendigen Synonyme).

Nun zur eigentlichen Frage,

Diese Technik wird String-Aggregation genannt.

Hier finden Sie viele weitere Alternativen.

http://www.oracle-base.com/articles/ 10g/StringAggregationTechniques.php Suchen Sie für andere Methoden nach „stragg“ auf http://asktom.oracle.com Ein weiterer nützlicher Link:http://www.orafaq.com/node/2290

Dies ist wahrscheinlich die am häufigsten verwendete. Viele Teams schreiben ihre eigenen benutzerdefinierten Funktionen, die mehr oder weniger dasselbe tun.

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

Während diese Lösung für varchar2 und number funktioniert, kann die beste generische Lösung mit der Oracle ODCIAggregate-Schnittstelle erstellt werden.

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

Die Implementierung dafür findet sich unter dem ersten Link oben auf www.oracle-base.com