MySql简单的存储过程行为不端。额外添加一行

时间:2013-09-30 07:02:09

标签: mysql stored-procedures

这个简单的存储过程应该采用未更新的行,并将它们插入另一个表中。但这种行为的方式相当奇怪。

如果我按下面的方式运行以下程序,我会得到: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

解决此问题的方法是什么,让它正常运行。

0 个答案:

没有答案
相关问题