声明存储过程 raise_salary1,输入员工编号emp_id。 如果员工 薪资 低于 9000 元且 工龄 超过 5 年,涨薪 500 元;否则涨薪 100 元。
时间: 2024-05-16 14:13:21 浏览: 46
好的,以下是 raise_salary1 存储过程的 SQL 实现:
```
CREATE PROCEDURE raise_salary1
@emp_id INT
AS
BEGIN
DECLARE @salary INT
DECLARE @years INT
SELECT @salary = salary, @years = years_employed
FROM employees
WHERE emp_id = @emp_id
IF @salary < 9000 AND @years > 5
BEGIN
UPDATE employees
SET salary = @salary + 500
WHERE emp_id = @emp_id
END
ELSE
BEGIN
UPDATE employees
SET salary = @salary + 100
WHERE emp_id = @emp_id
END
END
```
存储过程首先根据输入的员工编号查询员工的薪资和工龄,然后根据薪资和工龄判断是否需要涨薪,最后更新员工的薪资。如果员工的薪资低于 9000 元且工龄超过 5 年,则将薪资增加 500 元;否则将薪资增加 100 元。
相关问题
创建存储过程 raise_salary,要求输入员工编号emp_id,实现如下功能:如果northwind.employees 表中员工薪资低于 9000 元且工龄超过 5 年,涨薪 500 元;否则涨薪 100 元。
以下是创建 raise_salary 存储过程的 SQL 代码:
```sql
CREATE PROCEDURE raise_salary (IN emp_id INT)
BEGIN
DECLARE emp_salary INT;
DECLARE emp_hire_date DATE;
DECLARE emp_years INT;
-- 获取员工薪资和入职日期
SELECT salary, hire_date INTO emp_salary, emp_hire_date
FROM northwind.employees
WHERE employee_id = emp_id;
-- 计算员工工龄
SET emp_years = YEAR(CURDATE()) - YEAR(emp_hire_date);
-- 根据员工薪资和工龄涨薪
IF emp_salary < 9000 AND emp_years > 5 THEN
UPDATE northwind.employees SET salary = salary + 500 WHERE employee_id = emp_id;
ELSE
UPDATE northwind.employees SET salary = salary + 100 WHERE employee_id = emp_id;
END IF;
END;
```
使用方法:
```sql
CALL raise_salary(emp_id);
```
其中,`emp_id` 是要涨薪的员工编号。调用存储过程后,会根据员工当前薪资和工龄决定涨薪幅度,并更新员工的薪资信息。
对所有员工的薪水按照salary降序先进行1-N的排名,如果salary相同,再按照emp_no升序排列
明白了,您想了解如何对员工薪水进行排名。下面是一种SQL语句实现方式:
```
SELECT emp_no, salary, DENSE_RANK() OVER (ORDER BY salary DESC, emp_no ASC) AS ranking
FROM employees
ORDER BY ranking ASC;
```
这里使用了DENSE_RANK()函数来对员工薪水进行排名,同时也满足了您的要求:按照salary降序排列,如果salary相同,再按照emp_no升序排列。