create or replace PROCEDURE P_GET_EMP_BY_DEPARTMENT_NAME( p_department_name departments.department_name%type) -- AUTHID CURRENT_USER AS /* uebergabe eines department_name ausgabe first_/last_name aller employees des departments */ cursor c_emp_by_departement_name( pc_department_name departments.department_name%type) is select first_name, last_name from employees e join departments d on e.department_id = d.department_id where department_name = pc_department_name; i number := 0; e_department_empty exception; pragma exception_init(e_department_empty, -20000); e_no_department_found exception; pragma exception_init(e_no_department_found, -20001); BEGIN delete from employees_temp; select count(department_id) into i from departments where department_name = p_department_name; if i = 0 then raise_application_error (-20001, 'no department found'); end if; i := 0; for r_emp in c_emp_by_departement_name (p_department_name) loop i := i + 1; insert into employees_temp values r_emp; end loop; if i < 1 then raise_application_error (-20000, 'no employee found'); -- raise e_department_empty; end if; dbms_output.put_line( to_char(sysdate, 'yyyy-mm-ddd hh24:mi:ss') ); /* bulk collect geht nicht eine Tabelle open c_emp_by_departement_name(p_department_name); fetch c_emp_by_departement_name bulk collect into employees_temp; */ END;
CREATE OR REPLACE PROCEDURE EMP_PER_DEP AS cursor c_dep is select department_id, department_name from departments; i number; BEGIN for r_dep in c_dep loop dbms_output.put_line(r_dep.department_name); i := 0; for r_emp in (select * from employees where department_id = r_dep.department_id order by salary desc) loop i := i + 1; exit when i > 3; dbms_output.put_line(i||'. '||r_emp.last_name ||' '||r_emp.salary); end loop; end loop; END EMP_PER_DEP;