MySQL触发游标和循环更新错误的值

时间:2014-11-10 09:13:30

标签: mysql sql if-statement triggers cursor

嘿我在另一个表上的更新触发的循环内的更新语句中设置正确的值时遇到问题。

我有2张桌子,员工和base_wage。基本工资是新员工作为工作岗位的标准。在employees表中有一个工资栏,通常是基本工资,但有时可能高于基本工资。例如,如果一个人已经担任多年职位,他可能会获得比刚刚获得这份工作的人更高的工资。

我在base_wage表上更新了一个触发器,为每个具有该位置的员工设置了新的基本工资。触发器还应考虑到一些员工可能拥有的额外工资,并将其添加到新基本工资的工资中。

触发器有效,但它不会为那些获得超过基本工资的员工增加额外的工资。

我在这里创造了一个小提琴: http://sqlfiddle.com/#!2/cfe116/1

在小提琴中,经理的基本工资是150,我在员工表中添加了两个经理,一个薪水为150(基数),另一个得到170(比基数多20个)。如果我现在想要将经理的基本工资改为160,那么第一个经理应该得到160作为工资,第二个经理应该得到他的工资(170)减去旧的基本工资(150)加上新的基本工资= 180。 现在,由于一些奇怪的原因,两位经理的薪水变为160。

所以任何想法为什么这不起作用?我错过了什么吗?

提前致谢:)

1 个答案:

答案 0 :(得分:1)

问题在这里 UPDATE employees SET salary = mTotalSalary WHERE jobTitel = OLD.position;

您正在使用该职位更新员工表,它将更新具有相同职位的每位员工,并考虑使用employeeid所需的相同值。

首先声明

declare empId INT;

然后将员工ID提取到游标

SELECT salary,employeeId FROM employees WHERE jobTitel = OLD.position;

并在声明的变量

中使用它

FETCH employeeCursor INTO mSalary,empId;

最后将更新命令更改为

UPDATE employees SET salary = mTotalSalary WHERE employeeId = empId;

这是小提琴http://sqlfiddle.com/#!2/b4840/1