COLLECT
From Oracle FAQ
COLLECT is a SQL function, introduced with Oracle 10g, that aggregates data into a nested table collection, retaining multiple records of data within a single row.
Examples[edit]
Simple example, collecting the employee names in each department:
SQL> SELECT deptno, COLLECT(ename) 2 FROM emp 3 GROUP BY deptno; DEPTNO COLLECT(ENAME) ---------- ----------------------------------------------------------------- 10 SYSTPX9GB4fvXcdHgRAADugLXNg==('CLARK', 'KING') 20 SYSTPX9GB4fvXcdHgRAADugLXNg==('SMITH', 'JONES', 'SCOTT') 30 SYSTPX9GB4fvXcdHgRAADugLXNg==('ALLEN', 'WARD', 'MARTIN', 'BLAKE')
Using a user defined collection type:
SQL> CREATE OR REPLACE TYPE varchar2s AS TABLE OF VARCHAR2(2000); 2 / Type created.
SQL> SELECT deptno, CAST(COLLECT(ename) AS varchar2s) 2 FROM emp 3 GROUP BY deptno; DEPTNO CAST(COLLECT(ENAME)ASVARCHAR2S) ---------- ----------------------------------------------------------------- 10 VARCHAR2S('CLARK', 'KING') 20 VARCHAR2S('SMITH', 'JONES', 'SCOTT') 30 VARCHAR2S('ALLEN', 'WARD', 'MARTIN', 'BLAKE')