任务4-2 使用游标,给员工增资,当工作职位为 MANAGER 时,对应工资增加 10%,其他工作职位员工不增加工资,要求显示员工姓名、工作职位、增资前加工资和增资后加工资。
时间: 2024-04-05 16:33:32 浏览: 11
好的,我会使用游标来完成这个任务。以下是解决方案的代码:
```sql
DECLARE
v_employee_id employees.employee_id%TYPE;
v_job_title employees.job_title%TYPE;
v_salary employees.salary%TYPE;
v_new_salary employees.salary%TYPE;
BEGIN
-- 打开游标
OPEN employees_cursor;
-- 循环遍历员工数据
LOOP
-- 从游标中获取员工数据
FETCH employees_cursor INTO v_employee_id, v_job_title, v_salary;
-- 退出循环条件
EXIT WHEN employees_cursor%NOTFOUND;
-- 根据工作职位增加工资
IF v_job_title = 'MANAGER' THEN
v_new_salary := v_salary * 1.1; -- 增加 10%
ELSE
v_new_salary := v_salary; -- 其他工作职位不增加工资
END IF;
-- 显示员工信息
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee_id);
DBMS_OUTPUT.PUT_LINE('Job Title: ' || v_job_title);
DBMS_OUTPUT.PUT_LINE('Previous Salary: ' || v_salary);
DBMS_OUTPUT.PUT_LINE('New Salary: ' || v_new_salary);
DBMS_OUTPUT.PUT_LINE('--------------------------------');
END LOOP;
-- 关闭游标
CLOSE employees_cursor;
END;
/
```
请注意,上述代码中的 `employees_cursor` 是一个游标,它是通过查询 `employees` 表获得的。在这个示例中,我假设你已经创建了一个名为 `employees_cursor` 的游标,用于检索员工的数据。
请根据你的实际情况修改代码,并确保在执行之前备份数据库。