【发布时间】:2014-03-06 20:23:20
【问题描述】:
当我运行以下 MySQL 服务器存储过程时,我希望它永远运行,因为没有 CONTINUE HANDLER
BEGIN
DECLARE p INT(11) DEFAULT 0;
DECLARE no_more_rows BOOLEAN DEFAULT false;
DECLARE testA INT;
DECLARE iCursor CURSOR FOR SELECT test_a FROM Temp;
OPEN iCursor;
id_loop: LOOP
FETCH iCursor INTO testA;
SET p = p + 1;
INSERT INTO Temp2 (test1, test2) VALUES (testA, p);
END LOOP;
INSERT INTO Temp3 SET Finished=1;
CLOSE iCursor;
END
但似乎 CURSOR 工作完美,并将 Temp 表中的所有值写入 Temp2 表(并且计数器 p 的值也没有写入表中)。当我检查 MySQL 服务器上正在运行的进程时,该过程也不再运行。
但 Finished 代码没有写入 Temp3 表,因此我认为游标也没有正确关闭。
有人知道这里发生了什么吗?
为什么循环不是无限循环的?
可以实现这样的游标吗(以防循环后没有应该运行的代码)?
【问题讨论】:
标签: mysql sql stored-procedures cursor infinite-loop