Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql简单存储过程行为异常。额外添加一行_Mysql_Stored Procedures - Fatal编程技术网

MySql简单存储过程行为异常。额外添加一行

MySql简单存储过程行为异常。额外添加一行,mysql,stored-procedures,Mysql,Stored Procedures,这个简单的存储过程应该获取未更新的行,并将它们插入到另一个表中。但这种行为方式相当奇怪 如果我像下面这样运行下面的过程,我会得到:错误1329没有数据-获取、选择或处理零行,但插入行 样本表数据 注意fetch的位置 如果我像下面那样运行这个过程,我会额外插入一行。注意取回位置的变化 样本表数据 在运行下面的程序之后 注意fetch的位置 解决此问题并使其正确运行的方法是什么。您需要的输出是什么?需要的输出是选择更新为0的行到另一个表中。但对于测试,我使用相同的表。另外,在插入之前还发生了其他一

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

如果我像下面这样运行下面的过程,我会得到:错误1329没有数据-获取、选择或处理零行,但插入行

样本表数据

注意fetch的位置

如果我像下面那样运行这个过程,我会额外插入一行。注意取回位置的变化

样本表数据

在运行下面的程序之后

注意fetch的位置


解决此问题并使其正确运行的方法是什么。

您需要的输出是什么?需要的输出是选择更新为0的行到另一个表中。但对于测试,我使用相同的表。另外,在插入之前还发生了其他一些事情,我在这个问题上把它们去掉了。
"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
"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"
"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