请编写一个存储过程pro_sal,该过程接收员工号和薪水涨幅百分比作输入参数,并执行以下操作: (1)检查指定的员工号是否存在。如果不存在,输出一条错误消息。 (2)如果员工存在,计算新的薪水,并确保新的薪水不
时间: 2024-11-27 22:14:18 浏览: 0
可以创建一个名为 `pro_sal` 的存储过程来满足上述需求,以下是基于 SQL 示例的说明:
```sql
DELIMITER //
CREATE PROCEDURE pro_sal(IN emp_id INT, IN salary_increase DECIMAL(5, 2))
BEGIN
-- Step 1: 检查员工是否存在
IF NOT EXISTS (SELECT * FROM employees WHERE employee_id = emp_id) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Employee with the specified ID does not exist.';
END IF;
-- Step 2: 计算新的薪水
DECLARE new_salary DECIMAL(10, 2);
SET new_salary = employees.salary * (1 + salary_increase / 100);
-- Step 3: 确保新薪水不超过最大值(这里假设有一个salary_max变量)
DECLARE max_salary DECIMAL(10, 2);
SET max_salary = (SELECT MAX(salary) FROM employees);
IF new_salary > max_salary THEN
SET new_salary = max_salary;
SELECT 'Adjusted new salary to the maximum allowed';
ELSE
UPDATE employees SET salary = new_salary WHERE employee_id = emp_id;
SELECT CONCAT('New salary for employee ', emp_id, ' is: ', new_salary);
END IF;
END; //
DELIMITER ;
```
在这个存储过程中,首先检查员工ID是否有效,然后计算新的薪水,如果新的薪水超过了公司的最高工资,则将新薪水设为最高工资,并提示调整;否则直接更新员工的薪资。
阅读全文