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

Упражнения по PL / SQL-курсору: отображение первого отдела с более чем пятью сотрудниками

script1adsense2code
script1adsense3code

Курсор PL / SQL: Упражнение 46 с решением

Напишите блок в PL / SQL, чтобы отобразить первый отдел с более чем пятью сотрудниками.

Пример решения:

Код PL / SQL:

DECLARE
  emp_depid departments.department_id%TYPE := 10;emp_max_depid departments.department_id%TYPE;no_emps NUMBER(3);emp_depname departments.department_name%TYPE;dep_mgname employees.first_name%TYPE;dep_mglname employees.last_name%TYPE;dep_mgid departments.manager_id%TYPE;emp_found_nfound BOOLEAN := FALSE;BEGIN
  SELECT Max(department_id)
  INTO   emp_max_depid
  FROM   departments;
  
  dbms_output.Put_line(Rpad('Department ID',20)
  || Rpad('Department',20)
  || Rpad('Manager',20)
  ||'No. of Employees');
  dbms_output.Put_line( '---------------------------------------------------------------------------------');
  WHILE emp_depid <= emp_max_depid
  LOOP
    SELECT manager_id
    INTO   dep_mgid
    FROM   departments
    WHERE  department_id = emp_depid;
    
    IF dep_mgid IS NOT NULL THEN
      SELECT Count(*)
      INTO   no_emps
      FROM   employees
      WHERE  department_id = emp_depid;
      
      IF no_emps > 5 THEN
        SELECT department_name,
               first_name,
               last_name
        INTO   emp_depname,
               dep_mgname,
               dep_mglname
        FROM   employees e
        join   departments d
        ON     (
                      d.manager_id = e.employee_id)
        WHERE  d.department_id = emp_depid;
        
        dbms_output.Put_line(Rpad(emp_depid,20)
        || Rpad(emp_depname,20)
        ||Rpad((dep_mgname
        ||' '
        ||dep_mglname),20)
        ||no_emps);
        emp_found_nfound := TRUE;
        EXIT;
      END IF;
    END IF;
    emp_depid := emp_depid + 10;
  END LOOP;
  IF NOT emp_found_nfound THEN
    dbms_output.Put_line('No department found with more than 5 employees');
  END IF;
END;
/

Пример вывода:

 SQL> /
Идентификатор отдела Начальник отдела Количество работников
-------------------------------------------------- ---------------------------
30 Закупка Ден Рафаэли 6
Процедура PL / SQL успешно завершена.

Блок - схема:

«Блок-схема:

Улучшите этот пример решения и опубликуйте свой код через Disqus

Предыдущий: Напишите блок в PL / SQL для печати пунктирной линии в каждой 6-й строке.
Далее: Напишите блок в PL / SQL, чтобы напечатать отчет, который показывает, что идентификатор сотрудника, имя, дата найма и размер вознаграждения, которого они достигли в соответствии с опытом работы, присоединились к месяцу текущей даты.

Каков уровень сложности этого упражнения?

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code