PL/SQL Program: Count Employees in Each Department
PL/SQL While Loop: Exercise-15 with Solution
Write a PL/SQL program to display the number of employees in each department using a nested while loop. Return department name and number of employees.
Sample Solution:
Table: employees
employee_id integer first_name varchar(25) last_name varchar(25) email archar(25) phone_number varchar(15) hire_date date job_id varchar(25) salary integer commission_pct decimal(5,2) manager_id integer department_id integer
Table: departments
department_id integer department_name varchar(25) manager_id integer location_id integer
PL/SQL Code:
DECLARE
v_department_iddepartments.department_id%TYPE;
v_department_namedepartments.department_name%TYPE;
v_employee_count NUMBER;
v_employee_nameemployees.first_name%TYPE;
CURSOR c_departments IS
SELECT department_id, department_name
FROM departments;
CURSOR c_employees (p_department_id IN departments.department_id%TYPE) IS
SELECT first_name
FROM employees
WHERE department_id = p_department_id;
BEGIN
DBMS_OUTPUT.PUT_LINE('Employee Name' || CHR(9) || 'Number of Employees');
DBMS_OUTPUT.PUT_LINE('-------------------------------');
OPEN c_departments;
FETCH c_departments INTO v_department_id, v_department_name;
WHILE c_departments%FOUND LOOP
v_employee_count := 0;
DBMS_OUTPUT.PUT(v_department_name || CHR(9) || '');
OPEN c_employees(v_department_id);
FETCH c_employees INTO v_employee_name;
WHILE c_employees%FOUND LOOP
v_employee_count := v_employee_count + 1;
FETCH c_employees INTO v_employee_name;
END LOOP;
CLOSE c_employees;
DBMS_OUTPUT.PUT_LINE(v_employee_count);
FETCH c_departments INTO v_department_id, v_department_name;
END LOOP;
CLOSE c_departments;
END;
/
Sample Output:
Employee Name Number of Employees ------------------------------- Administration 1 Marketing 2 Purchasing 6 Human Resources 1 Shipping 45 IT 5 Public Relation 1 Sales 34 Executive 3 Finance 6 Accounting 2 Treasury 0 Corporate Tax 0 Control AndCre 0 Shareholder Ser 0 Benefits 0 .....
Explanation:
The said code in Oracle's PL/SQL that retrieves the departments from the 'departments' table and count the number of employees in each department.
The cursor c_departments fetches the department details, then the outer WHILE loop iterates through each department.
A counter v_employee_count is initialized to zero for each department in the loop.
The inner WHILE loop fetches the employee names for that department with the current department ID from the cursor c_employees. The v_employee_count is incremented for each employee found.
The program prints the department name followed by the corresponding number of employees using.
The DBMS_OUTPUT.PUT_LINE procedure displays the department name followed by the corresponding number of employees The nested loops continue until all departments and employees have been processed.
Flowchart:
Previous: Average salary by job title.
Next: PL/SQL program to display total number of employees hired each year.
What is the difficulty level of this exercise?
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://w3resource.com/plsql-exercises/while-loop/plsql-while-loop-exercise-15.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics