SQL> create or replace type emp_row as object
2 (
3 empno number(4)
4 ,ename varchar2(10)
5 ,job varchar2(9)
6 ,mgr number(4)
7 ,hiredate date
8 ,sal number(7,2)
9 ,comm number(7,2)
10 ,deptno number(2)
11 );
12 /
Type created.
SQL>
SQL> create or replace type emp_list as table of emp_row
2 /
Type created.
SQL>
SQL> select
2 deptno, dname,
3 ( select collect(emp_row( empno, ename, job, mgr, hiredate, sal, comm, deptno))
4 from emp
5 where emp.deptno = dept.deptno)
6 from dept;
DEPTNO DNAME
---------- --------------
(SELECTCOLLECT(EMP_ROW(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO))FROMEMPWHEREEMP.DEPTNO=DEPT.DEPTNO)(EMPNO, ENAME, J
------------------------------------------------------------------------------------------------------------------------
10 ACCOUNTING
EMP_LIST(EMP_ROW(7782, 'CLARK', 'MANAGER', 7839, '09-JUN-81', 2450, NULL, 10), EMP_ROW(7839, 'KING', 'PRESIDENT', NULL,
'17-NOV-81', 5000, NULL, 10), EMP_ROW(7934, 'MILLER', 'CLERK', 7782, '23-JAN-82', 1300, NULL, 10))
20 RESEARCH
EMP_LIST(EMP_ROW(7369, 'SMITH', 'CLERK', 7902, '17-DEC-80', 800, NULL, 20), EMP_ROW(7566, 'JONES', 'MANAGER', 7839, '02-
APR-81', 2975, NULL, 20), EMP_ROW(7788, 'SCOTT', 'ANALYST', 7566, '09-DEC-82', 3000, NULL, 20), EMP_ROW(7876, 'ADAMS', '
CLERK', 7788, '12-JAN-83', 1100, NULL, 20), EMP_ROW(7902, 'FORD', 'ANALYST', 7566, '03-DEC-81', 3000, NULL, 20))
30 SALES
EMP_LIST(EMP_ROW(7499, 'ALLEN', 'SALESMAN', 7698, '20-FEB-81', 1600, 300, 30), EMP_ROW(7521, 'WARD', 'SALESMAN', 7698, '
22-FEB-81', 1250, 500, 30), EMP_ROW(7654, 'MARTIN', 'SALESMAN', 7698, '28-SEP-81', 1250, 1400, 30), EMP_ROW(7698, 'BLAKE
', 'MANAGER', 7839, '01-MAY-81', 2850, NULL, 30), EMP_ROW(7844, 'TURNER', 'SALESMAN', 7698, '08-SEP-81', 1500, NULL, 30)
, EMP_ROW(7900, 'JAMES', 'CLERK', 7698, '03-DEC-81', 950, NULL, 30))
40 OPERATIONS
EMP_LIST()
4 rows selected.