这个简单的存储过程应该采用未更新的行,并将它们插入另一个表中。但这种行为的方式相当奇怪。
如果我按下面的方式运行以下程序,我会得到:Error 1329 No data - zero rows fetched, selected, or processed
,但会插入行。
样本表数据
"id" "total" "vals" "valLen" "updated"
"1" "0" "0" "0" "1"
"2" "0" "1" "1" "0"
"3" "0" "1,2" "2" "0"
"4" "0" "1,2,3" "3" "0"
请注意抓取的位置
BEGIN
#declare variable
DECLARE procId, procTotal, proc INT(10);
DECLARE procUpdated TINYINT(1);
DECLARE procVals, procValLen VARCHAR(50);
DECLARE done INT DEFAULT 0;
DECLARE counter TINYINT(1);
#declare cursor
DECLARE cur1 CURSOR FOR SELECT id, total, vals, valLen, updated
FROM scores
WHERE updated = 0;
#declare handle
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
#open cursor
OPEN cur1;
#starts the loop
the_loop: LOOP
FETCH cur1 INTO procId, procTotal, procVals, procValLen, procUpdated;
IF done THEN
LEAVE the_loop;
END IF;
insert into scores (total) values (procId);
END LOOP the_loop;
CLOSE cur1;
END
如果我按照下面的步骤运行,我会插入1个额外的行。请注意FETCH
样本表数据
"id" "total" "vals" "valLen" "updated"
"1" "0" "0" "0" "1"
"2" "0" "1" "1" "0"
"3" "0" "1,2" "2" "0"
"4" "0" "1,2,3" "3" "0"
运行以下proc
"id" "total" "vals" "valLen" "updated"
"1" "0" "0" "0" "1"
"2" "0" "1" "1" "0"
"3" "0" "1,2" "2" "0"
"4" "0" "1,2,3" "3" "0"
"" "4" "0" "0" "0"
"" "4" "0" "0" "0"
"" "3" "0" "0" "0"
"" "2" "0" "0" "0"
"" "1" "0" "0" "0"
请注意抓取的位置
BEGIN
#declare variable
DECLARE procId, procTotal, proc INT(10);
DECLARE procUpdated TINYINT(1);
DECLARE procVals, procValLen VARCHAR(50);
DECLARE done INT DEFAULT 0;
DECLARE counter TINYINT(1);
#declare cursor
DECLARE cur1 CURSOR FOR SELECT id, total, vals, valLen, updated
FROM scores
WHERE updated = 0;
#declare handle
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
#open cursor
OPEN cur1;
#starts the loop
the_loop: LOOP
IF done THEN
LEAVE the_loop;
END IF;
FETCH cur1 INTO procId, procTotal, procVals, procValLen, procUpdated;
insert into scores (total) values (procId);
END LOOP the_loop;
CLOSE cur1;
END
解决此问题的方法是什么,让它正常运行。