CREATE OR REPLACE TYPE "HR"."EMP_LIST" 
 AS TABLE OF VARCHAR2(100)
CREATE TABLE DEP_EMP as select department_name from departments;
alter table dep_emp add (emp_names emp_list)
nested table emp_names store as nested_tab return as value;
PROCEDURE fill_dep_emp
   IS
   TYPE emp_table_type IS TABLE OF emp_list
      INDEX BY varchar2(100);

   t_emp    emp_table_type;
   v_index  varchar2(100);

BEGIN

 for r_ed in (SELECT FIRST_NAME||' '||LAST_NAME e_name, DEPARTMENT_NAME
                     FROM DEPARTMENTS , EMPLOYEES
                    WHERE ( (DEPARTMENTS.DEPARTMENT_ID = EMPLOYEES.DEPARTMENT_ID) ))
 loop
   if (not t_emp.exists(r_ed.department_name)) then
     t_emp(r_ed.department_name) := emp_list();
   end if;
   t_emp(r_ed.department_name).extend;
   t_emp(r_ed.department_name)(t_emp(r_ed.department_name).last) := r_ed.e_name;
 end loop;

v_index := t_emp.first;
loop
  exit when v_index is null;
  update dep_emp set emp_names = t_emp(v_index)
  where department_name = v_index;
  v_index := t_emp.next(v_index);
end loop;


END;