mysql - 事务中的游标循环

标签 mysql loops transactions cursor

我什至无法让这个基本的游标循环在我的事务中运行。

请帮忙。提前致谢!

CREATE PROCEDURE ClearItems(IN itemName CHAR)
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE bID INT(255);
    DECLARE bIDs CURSOR FOR SELECT id FROM table1 WHERE column1 = itemName AND column2 = 'b' ORDER BY column3 DESC, date ASC;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    START TRANSACTION;
        OPEN bIDs;
        clear_loop: LOOP
        FETCH bIDs INTO bID;
        IF done THEN
            LEAVE clear_loop;
            END IF;
        INSERT INTO table2 (column1) SELECT bID;
        END LOOP;
        CLOSE bIDs;
    COMMIT; 
END //
DELIMITER ;

最佳答案

要解决此问题 - 重命名声明的 ID 变量。字段名称和变量不应相同。


此外,如果您想填充另一个表,请尝试使用 INSERT ... SELECT陈述。它将帮助您避免使用游标。例如-

INSERT INTO table2(`2column1`)
  SELECT id
    FROM table1
    WHERE `1column1` = itemName AND `1column2` = 'b'
    ORDER BY `1column3` DESC, date ASC;

关于mysql - 事务中的游标循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10705005/

相关文章:

mysql - MySQL 中的数组切片/group_concat 限制

mysql - 在 Laravel 4 中使用现有的 MySQL 数据库

database - 两阶段提交是否可以防止最终提交失败?

c# - 事务性 CloudBlob

mysql - 即使 GTID_MODE=ON 也会进行匿名交易

php - macOS Sierra 更新后的 MySQL 权限错误

mysql安装报错:Unable to set password for the MySQL "root" user

javascript - 如何编写 While 循环来提示一个单词并退出另一个单词的循环

loops - 循环增量值

java - 帮助理解 java 'for' 循环