mysql - 存储过程不更新 MySQL 的表

标签 mysql sql stored-procedures heidisql database-cursor

在 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/

相关文章:

php - 如何使用 php 和 mysql 从查询创建表

python - 我的 Flask 应用程序中的错误 "The view function did not return a valid response. "在哪里?

带有日期的mysql单元格值作为带有年份的新列

mysql - 根据创建表语句更改数据库

mysql - 如何将 'greater' 筛选器添加到结果 Pane 列中的每个 'minimum' 值

phpMyAdmin MySQL 时间戳显示尾随零

mysql - 确定 M :N database system 中未使用的值

sql-server - 存储过程和 OPTIMIZE FOR UNKNOWN

mysql - 如何编写程序将数据插入到phpmyadmin 中的表中?

oracle - 调用过程时的 PL/SQL 事务