-- Find those managers in the employees table, the majority of whose direct
reports were hired
-- before the manager
-- CLASSICAL PROCEDURAL APPROACH
-- This scenario needs the hr sample schema that comes along with Oracle9i database-- Connect hr/hr@9i drop table young_managers_classical; create table young_managers_classical as select employee_id from employees where 1=2; declare cursor managers is select employee_id, hire_date, cursor ( select hire_date from employees reports where reports.manager_id = managers.employee_id ) from employees managers; manager_employee_id employees.employee_id%type; manager_hire_date employees.hire_date%type; reports sys_refcursor; type report_hire_dates_t is table of employees.hire_date%type index by binary_integer; report_hire_dates report_hire_dates_t; before integer; after integer; begin open managers; loop before:=0; after:=0; fetch managers into manager_employee_id, manager_hire_date, reports; exit when managers%notfound; fetch reports bulk collect into report_hire_dates; if report_hire_dates.count > 0 then for j in report_hire_dates.first..report_hire_dates.last loop case report_hire_dates(j) <= manager_hire_date when true then before := before + 1; when false then after := after + 1; end case; end loop; end if; if before > after then insert into young_managers_classical values ( manager_employee_id ); end if; end loop; close managers; end; /