2017-03-08 49 views
0

我有一个MySQL的代码,将遍历列表并且改变工资总额场。不过,我不明白的是,当剂量为循环“完成”的值更改停止? Becaunse直到完成取决于改变的价值。这是一本书的例子。总之,这里是代码:“完成”值何时更改?

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

当光标没有找到数据集中更多的数据来完成的值将被改变。

这是由处理程序代码控制:

DECLARE continue HANDLER FOR NOT FOUND SET done = 1; 

这基本上是说,当有数据此设置光标没有更多的数据,所做的值设置为1

有一个在这方面的一些额外的信息:https://dev.mysql.com/doc/refman/5.7/en/declare-handler.html - 读取“NOT FOUND:速记类SQLSTATE值以‘02’开头的这是光标的范围内相关的,是用来控制何时会发生什么光标到达数据组的末尾,如果没有更多的行是可用的,一个无数据状态与SQLSTATE值“0200发生0' 。为了检测这种情况下,你可以设立一个处理程序,它还是一个NOT FOUND条件。”

希望帮助:)

+0

非常感谢你。现在我可以理解它 –