plsql循环练习题
时间: 2023-06-30 11:22:44 浏览: 117
好的,以下是一个 PL/SQL 循环练习题:
假设有一个员工表(employee),表结构如下:
| 列名 | 数据类型 |
| ---------- | ------------ |
| id | NUMBER(10) |
| name | VARCHAR2(50) |
| salary | NUMBER(10) |
| hire_date | DATE |
| department | VARCHAR2(50) |
请编写一个 PL/SQL 程序,统计每个部门的员工数和平均工资,并将结果存储在一个新表(statistics)中,表结构如下:
| 列名 | 数据类型 |
| ----------- | ---------- |
| department | VARCHAR2 |
| employee_no | NUMBER(10) |
| avg_salary | NUMBER(10) |
程序逻辑如下:
1. 声明一个游标,查询 employee 表中的所有部门名称和平均工资。
2. 依次读取游标中的每一行数据,计算该部门的员工数和平均工资,并将结果存储到 statistics 表中。
3. 关闭游标,提交事务。
程序代码如下:
```plsql
DECLARE
CURSOR c_emp IS
SELECT department, AVG(salary) AS avg_salary
FROM employee
GROUP BY department;
BEGIN
FOR r_emp IN c_emp LOOP
INSERT INTO statistics (department, employee_no, avg_salary)
VALUES (r_emp.department, 0, r_emp.avg_salary);
UPDATE statistics
SET employee_no = (SELECT COUNT(*) FROM employee WHERE department = r_emp.department)
WHERE department = r_emp.department;
END LOOP;
COMMIT;
END;
```
注意事项:
1. 在程序开始前,需要先创建 statistics 表。
2. 在程序执行前,需要确保 employee 表中已经存在数据。
3. 在程序执行过程中,需要确保 statistics 表中不存在数据,否则会出现主键冲突错误。
4. 在程序执行过程中,需要确保 employee 表和 statistics 表处于同一数据库中。
阅读全文