Рекомендуется не использовать WM_CONCAT , поскольку это недокументированная функция и она была удалена из версии 12c.См. Почему бы не использовать функцию WM_CONCAT в Oracle?
Если вы используете 11gR2 и выше, используйте LISTAGG .
Для версии до 11g , где LISTAGG
не поддерживается, вы можете использовать функции ROW_NUMBER () и SYS_CONNECT_BY_PATH .
Например,
SELECT deptno,
LTRIM(MAX(SYS_CONNECT_BY_PATH(ename,','))
KEEP (DENSE_RANK LAST ORDER BY curr),',') AS employees
FROM (SELECT deptno,
ename,
ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY ename) AS curr,
ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY ename) -1 AS prev
FROM emp)
GROUP BY deptno
CONNECT BY prev = PRIOR curr AND deptno = PRIOR deptno
START WITH curr = 1;
DEPTNO EMPLOYEES
---------- --------------------------------------------------
10 CLARK,KING,MILLER
20 ADAMS,FORD,JONES,SCOTT,SMITH
30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
3 rows selected.