Mysql 事务中的游标循环

Mysql 事务中的游标循环,mysql,loops,transactions,cursor,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 c

我甚至不能让这个基本的游标循环在我的事务中运行

请帮忙。提前谢谢

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 INTO table2(`2column1`)
  SELECT id
    FROM table1
    WHERE `1column1` = itemName AND `1column2` = 'b'
    ORDER BY `1column3` DESC, date ASC;

检查语法错误。未报告任何错误。一切都会过去的。您在尝试时是否得到了它们?此行将抛出一些错误—“其中1column1=itemName,1column2='b'ORDER BY 1column3 DESC”。字段
1列1
和其他字段必须正确引用或命名。我不明白。是否引用了专栏?itemName是过程中的值。如果在具有in值的WHERE中搜索列,则不能这样做吗?或者这样做时语法必须改变吗?非常感谢。我只是在没有循环的情况下尝试了它,它插入了一个空值。在使用where时,是否必须对游标使用特殊语法?再次抱歉。这也不是所声明变量的真实名称。我将把它改为更接近它的样子。我在事务中放了一整套代码,所以我不想插入。我只是想把它揭穿,这样我就可以知道出了什么问题。我想这是我声明、打开或获取游标的方式,但我不知道。它仍然在插入0(我猜是NULL)。当我尝试的时候,这个循环甚至都不会启动。我的语法肯定出了什么问题。我注释掉了“item=itemName”部分,光标工作了。如何使用IN变量?再次感谢。正确使用了'itemName'参数。检查它是否插入了任何内容,编写如下内容-插入表2(第1列)中的值(1)。还要检查SELECT查询是否返回数据集,只需执行SELECT查询而不使用光标。