当我运行以下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服务器上正在运行的进程时,该过程也不再运行。
但是完成的代码没有写入Temp3表,因此我认为光标也没有正确关闭。
有人知道这里发生了什么吗?
为什么循环无法运行?
是否可以实现这样的游标(如果没有代码应该在循环之后运行)?
答案 0 :(得分:1)
您是如何调用存储过程的?
我明白了:
mysql> CALL sp_test;
ERROR 1329 (02000): No data - zero rows fetched, selected, or processed
错误会终止存储过程的执行,因此请勿在{{1}}上写入,也不要关闭游标。