plsql按照salgrade等级表,按照每个员工的工资等级,分别进行加薪,5级%1,4级2%,3级%3,2级4% ,1级5%; 输出加薪前后的员工姓名及工资信息;
时间: 2024-10-21 22:15:35 浏览: 12
在Oracle PL/SQL中,你可以通过创建一个存储过程来实现这个需求。首先,假设你有一个名为`Employees`的表,包含`emp_id`, `name`, 和`salary`字段,以及一个表示工资等级的`salgrade`字段。下面是创建存储过程的一个示例:
```plsql
CREATE OR REPLACE PROCEDURE adjust_salaries (
p_salary_table IN Employees%ROWTYPE,
p_new_salary OUT NUMBER
)
AS
BEGIN
CASE p_salary_table.salgrade
WHEN 5 THEN p_new_salary := p_salary_table.salary * 1.01; -- 5级加薪1%
WHEN 4 THEN p_new_salary := p_salary_table.salary * 1.02; -- 4级加薪2%
WHEN 3 THEN p_new_salary := p_salary_table.salary * 1.03; -- 3级加薪3%
WHEN 2 THEN p_new_salary := p_salary_table.salary * 1.04; -- 2级加薪4%
ELSE p_new_salary := p_salary_table.salary * 1.05; -- 1级加薪5%
END CASE;
END adjust_salaries;
-- 调用存储过程并更新表中的数据
DECLARE
v_employee Employee%ROWTYPE;
BEGIN
FOR each_employee IN (SELECT * FROM Employees) LOOP
v_employee.salary := adjust_salaries(v_employee);
-- 在这里你可以选择直接更新表,或者只打印结果
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee.name || ', Old Salary: ' || v_employee.salary ||
', New Salary: ' || v_employee.salary); -- 打印
-- UPDATE Employees SET salary = v_employee.salary WHERE emp_id = each_employee.emp_id; -- 更新数据库
END LOOP;
END;
/
```
在这个过程中,我们创建了一个名为`adjust_salaries`的存储过程,它接受一个表行作为输入,并返回调整后的薪水。然后在循环中遍历所有员工,调用该过程并打印出加薪前后的信息。
如果你想要真正地更新数据库,记得在循环最后加上`UPDATE`语句,替换掉`DBMS_OUTPUT.PUT_LINE`那行。但是请注意,实际操作中通常会避免在循环中进行这样的数据库更新,以防性能问题。
阅读全文