Delimited list با LISTAGG در اوراکل
در قديم به سه طريق مي توانستيم در دیتابیس Oracle ليست هايي با Delimiter هاي خاص ايجاد كرد
a) Custom Function
b) SYS_CONNECT_BY_PATH
c) Custom Aggregate Functions
حال مي توان بوسيله LISTAGG Function در اوراکل براحتي اين ليست ها را حتي در كوئري هاي پيچيده با كارايي بهتر ايجاد كرد.
شكل دستور:
LISTAGG (measure_column [, 'delimiter'])
WITHIN GROUP (order_by_clause) [OVER (query_partition_clause)]
مثال:
SELECT d.deptno,
d.dname,
LISTAGG (e.ename, ', ') WITHIN GROUP (ORDER BY e.ename) AS ename_list
FROM dept d,
emp e
WHERE e.deptno(+) = d.deptno
GROUP BY d.deptno, d.dname
ORDER BY d.deptno, d.dname;
جواب بدين صورت مي باشد:
CLARK, KING, MILLER
ADAMS, FORD, JONES, SCOTT, SMITH
ALLEN, BLAKE, JAMES, MARTIN, TURNER, WARD