在 HeidiSQL 上运行此例程,它运行时有 0 行受到影响,尽管应该正好有 1 行受到影响。两个 select 语句似乎在此存储过程之外都能正常工作。
BEGIN
DECLARE someId INT;
DECLARE done INT DEFAULT FALSE;
DECLARE cur1 CURSOR FOR
select anotherId from tableA
where yetAnotherId IN(another select statement);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
IF done THEN
LEAVE read_loop;
END IF;
FETCH cur1 INTO someId;
update tableB
set x = 'hello', y = 'world'
where something = someId;
END LOOP;
CLOSE cur1;
END;
我想知道这个例程的结构可能存在什么问题。在我看来,尽管光标应该包含 1 个条目,但事实并非如此。
谢谢
编辑:看起来“someId”与同名的表字段匹配,因此出现了问题。现在这个问题已经解决了。
最佳答案
你的SP看起来不错,我已经对MySql进行了更改,请尝试一下
BEGIN
DECLARE someId INT;
DECLARE done INT DEFAULT FALSE;
DECLARE cur1 CURSOR FOR
select anotherId from tableA
where yetAnotherId IN(another select statement);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO someId;
update tableB
set x = 'hello', y = 'world'
where something = someId;
IF done THEN
CLOSE cur1;
LEAVE read_loop;
END IF;
END LOOP read_loop;
END;
关于mysql - 存储过程不更新 MySQL 的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50758873/