sql—存储过程不更新mysql的表

j13ufse2  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(380)

在heidisql上运行这个例程,它运行时有0行受影响,即使只有1行受影响。在这个存储过程之外,这两个select语句似乎都可以正常工作。

  1. BEGIN
  2. DECLARE someId INT;
  3. DECLARE done INT DEFAULT FALSE;
  4. DECLARE cur1 CURSOR FOR
  5. select anotherId from tableA
  6. where yetAnotherId IN(another select statement);
  7. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  8. OPEN cur1;
  9. read_loop: LOOP
  10. IF done THEN
  11. LEAVE read_loop;
  12. END IF;
  13. FETCH cur1 INTO someId;
  14. update tableB
  15. set x = 'hello', y = 'world'
  16. where something = someId;
  17. END LOOP;
  18. CLOSE cur1;
  19. END;

我想知道这个程序的结构有什么问题。在我看来,即使光标应该包含一个条目,它也不包含。
谢谢
edit:看起来“someid”匹配了一个同名的表字段,因此出现了问题。现在已经解决了。

blmhpbnm

blmhpbnm1#

你的sp看起来不错,我已经为mysql做了更改,请尝试一下

  1. BEGIN
  2. DECLARE someId INT;
  3. DECLARE done INT DEFAULT FALSE;
  4. DECLARE cur1 CURSOR FOR
  5. select anotherId from tableA
  6. where yetAnotherId IN(another select statement);
  7. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  8. OPEN cur1;
  9. read_loop: LOOP
  10. FETCH cur1 INTO someId;
  11. update tableB
  12. set x = 'hello', y = 'world'
  13. where something = someId;
  14. IF done THEN
  15. CLOSE cur1;
  16. LEAVE read_loop;
  17. END IF;
  18. END LOOP read_loop;
  19. END;
展开查看全部

相关问题