【发布时间】:2014-04-29 12:19:03
【问题描述】:
我有两张表,Employee 和 Department。它们看起来像这样:
Employee
Name
SSN
DeptID
Salary
Department
DName
DId
Total_Sal
Department.total_sal 是属于该部门的所有员工工资的总和。我需要一个存储过程,它利用游标遍历每个员工,并更新相应部门的工资。我以前从未使用过游标或存储过程,我对如何遍历一个表但更新另一个表有点困惑。任何帮助/建议表示赞赏。
另一个简单的问题,我喜欢在 SQLFIDDLE 中完成我所有的 sql 工作,有人知道它是否也支持存储过程/游标吗?
这是我的第一次尝试,我想在开头也擦除 Department.Total_sal 是个好主意?
DELIMITER //
DROP PROCEDURE IF EXISTS cur_sal
CREATE PROCEDURE cur_sal
BEGIN
DECLARE e_sal, e_dno INT;
DECLARE d_sal, d_dno INT;
DECLARE cur_emp CURSOR FOR SELECT salary, DeptId FROM employee;
DECLARE cur_dep CURSOR FOR SELECT DId, Total_sal FROM department;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur_emp;
OPEN cur_dep;
r_loop: LOOP
FETCH cur_emp INTO e_sal, e_dno;
FETCH cur_dep INTO d_sal, d_dno;
IF done THEN
LEAVE r_loop;
END IF;
IF e_dno = d_dno THEN
UPDATE department SET total_sal = total_sal + e_sal;
END IF;
END LOOP;
CLOSE cur_emp;
CLOSE cur_dep;
END //
【问题讨论】:
-
你需要先展示你尝试过的东西
-
为什么要用光标进行迭代?带有连接的单个更新查询可以满足您的需求。
标签: mysql