我有一个mysql代码,它将遍历列表并更改总薪水字段。但是,我不明白的是,当剂量时,'完成'的值会因循环停止而改变? Becaunse UNTIL DONE取决于要改变的价值。这是一本书的例子。无论如何,这是代码:
CREATE PROCEDURE updateSalary() BEGIN
DECLARE done INT DEFAULT 0;
DECLARE current_dnum INT;
DECLARE dnumcur CURSOR FOR SELECT dnumber FROM deptsal;
DECLARE continue HANDLER FOR NOT FOUND SET DONE = 1;
OPEN dnumcur;
REPEAT
FETCH dnumcur INTO current_dnum;
UPDATE deptsal SET totalSalary = (SELECT SUM(salary) FROM employee
WHERE dno=current_dnum) WHERE dnumber=current_dnum;
UNTIL done
END REPEAT;
CLOSE dnumcur;
END$$
delimiter ;
任何帮助将不胜感激! 感谢。
答案 0 :(得分:0)
当光标在数据集中找不到更多数据时,将更改done的值。
这由代码中的处理程序控制:
DECLARE continue HANDLER FOR NOT FOUND SET done = 1;
这基本上是说,当此游标的数据集中没有更多数据时,将done的值设置为1.
在https://dev.mysql.com/doc/refman/5.7/en/declare-handler.html上有一些额外的信息 - 读取“NOT FOUND:以'02'开头的SQLSTATE值类的简写。这在游标的上下文中是相关的并且用于控制光标到达数据集末尾时会发生什么。如果没有更多行可用,则SQLSTATE值为“02000”时会出现无数据条件。要检测此情况,可以为其设置处理程序或为NOT设置处理程序发现条件。“
希望有所帮助:)