кодесурса
«PL / SQL

Упражнения на курсорах PL / SQL: распечатайте название отдела, начальник отдела, город и количество сотрудников, работающих в этом отделе

script1adsense2code
script1adsense3code

Курсор 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 программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code