Упражнения на курсорах PL / SQL: распечатайте название отдела, начальник отдела, город и количество сотрудников, работающих в этом отделе
Курсор PL / SQL: Упражнение 43 с решением
Напишите блок в PL / SQL, чтобы напечатать название отдела, начальник отдела, город и количество сотрудников, работающих в этом отделе.
Пример решения:
Код PL / SQL:
DECLARE
CURSOR cur_for_dep IS
SELECT *
FROM departments
WHERE manager_id IS NOT NULL;
FUNCTION Count_for_emp (p_deptid NUMBER)
RETURN NUMBER
IS
count_of_emp NUMBER(3);
BEGIN
SELECT Count(*)
INTO count_of_emp
FROM employees
WHERE department_id = p_deptid;
RETURN count_of_emp;
END;
FUNCTION Name_of_hod (p_deptid NUMBER)
RETURN VARCHAR2
IS
emp_as_hod employees.first_name%TYPE;
BEGIN
SELECT first_name
INTO emp_as_hod
FROM employees
WHERE employee_id = (SELECT manager_id
FROM departments
WHERE department_id = p_deptid);
RETURN emp_as_hod;
END;
FUNCTION City_of_dep (p_deptid NUMBER)
RETURN VARCHAR2
IS
city_head_off locations.city%TYPE;
BEGIN
SELECT city
INTO city_head_off
FROM locations
WHERE location_id = (SELECT location_id
FROM departments
WHERE department_id = p_deptid);
RETURN city_head_off;
END;
BEGIN
dbms_output.Put_line(Rpad('Department Name', 30)
||Rpad('Department Head', 20)
||Rpad('Head Office', 20)
||'Number of Employees');
dbms_output.Put_line('----------------------------------------------------------------------------------------');
FOR rows_of_dep IN cur_for_dep LOOP
dbms_output.Put_line(Rpad(rows_of_dep.department_name, 30)
|| Rpad(Name_of_hod(rows_of_dep.department_id), 20)
|| Rpad(City_of_dep(rows_of_dep.department_id), 20)
|| Count_for_emp(rows_of_dep.department_id));
END LOOP;
END;
Пример вывода:
SQL> / Наименование отдела Начальник отдела Головной офис Количество сотрудников -------------------------------------------------- -------------------------------------- Администрация Дженнифер Сиэтл 1 Маркетинг Майкл Торонто 2 Покупка Ден Сиэтл 6 Людские ресурсы Сьюзен Лондон 1 Доставка Адам Юг Сан-Франциско 45 IT Александр Саутлейк 5 Связи с общественностью Герман Мюнхен 1 Продажи Джон Оксфорд 34 Исполнительный Стивен Сиэтл 3 Финанс Нэнси Сиэтл 6 Бухгалтерский учет Шелли Сиэтл 2 Процедура PL / SQL успешно завершена.
Блок - схема:
Улучшите этот пример решения и опубликуйте свой код через Disqus
Предыдущий: Напишите блок в PL / SQL, чтобы отобразить имя, должность и дату начала работы сотрудников.
Далее: Запишите блок в PL / SQL для печати указанного количества строк в таблице.
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования
disqus2code