使用游标生成职工工资表

已知工资计算公式为:工资=基本工资+职级工资+职级绩效
根据tbl_employees、tbl_departments和tbl_rank_salary使用游标创建存储过程:employeesalary()
该存储过程目的是生成职工工资表emsalary,包括职工编号(employee_id)、部门名称(department)、职工姓名(name)、职级名称(rank_title )、工资(allsalary)5个字段。

img

img

create table语句?这个也要我帮你写嘛

这个你参考下,对不对我就管不了了

CREATE PROCEDURE employeesalary()
BEGIN
DECLARE emp_id INT;
DECLARE dept_name VARCHAR(255);
DECLARE emp_name VARCHAR(255);
DECLARE rank_title VARCHAR(255);
DECLARE basic_salary FLOAT;
DECLARE rank_salary FLOAT;
DECLARE rank_performance FLOAT;
DECLARE all_salary FLOAT;

DECLARE done INT DEFAULT FALSE;
DECLARE emp_cursor CURSOR FOR
SELECT tbl_employees.employee_id, tbl_departments.department, tbl_employees.name, tbl_rank_salary.rank_title, tbl_employees.basic_salary, tbl_rank_salary.rank_salary, tbl_rank_salary.rank_performance 
FROM tbl_employees 
INNER JOIN tbl_departments
ON tbl_employees.department_id = tbl_departments.department_id
INNER JOIN tbl_rank_salary
ON tbl_employees.rank_level = tbl_rank_salary.rank_level;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

DROP TABLE IF EXISTS emsalary;
CREATE TABLE emsalary (
employee_id INT,
department VARCHAR(255),
name VARCHAR(255),
rank_title VARCHAR(255),
allsalary FLOAT
);

OPEN emp_cursor;

read_loop: LOOP
FETCH emp_cursor INTO emp_id, dept_name, emp_name, rank_title, basic_salary, rank_salary, rank_performance;
IF done THEN
LEAVE read_loop;
END IF;

SET all_salary = basic_salary + rank_salary + rank_performance;

INSERT INTO emsalary (employee_id, department, name, rank_title, allsalary)
VALUES (emp_id, dept_name, emp_name, rank_title, all_salary);

END LOOP;

CLOSE emp_cursor;

END;