2017-03-08 63 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

非常感謝你。現在我可以理解它 –