我想我正在缩小我的范围。我有一个循环只发射一次:
DELIMITER $$
DROP PROCEDURE IF EXISTS `thread_updates` $$
CREATE PROCEDURE `thread_updates`()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE my_curr_id INT DEFAULT NULL;
-- DECLARE other vars
DECLARE fixer_cursor CURSOR FOR
SELECT DISTINCT(id)
FROM log
WHERE date >= '2018-01-01';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN fixer_cursor;
REPEAT
FETCH fixer_cursor INTO my_curr_id;
IF NOT done THEN
SELECT data FROM table WHERE id = my_curr_id; -- This may not exist
-- Do other stuff with 'data' or NULL from above
END IF;
UNTIL done END REPEAT;
CLOSE fixer_cursor;
END $$
DELIMITER ;
我认为问题可能出在 IF NOT done THEN
循环中,我有几个select语句可能试图选择不存在(未找到)的结果。
对于我来说,这很好,因为逻辑继续在这些点中使用空值,但是我怀疑 CONTINUE HANDLER FOR NOT FOUND
正在抓到 NOT FOUND
警告这些选择将抛出循环内部,从而过早地停止整个循环。
我怎么能听你的 NOT FOUND
仅对我的光标发出警告?
或者,我怎样才能抑制 NOT FOUND
我的循环中的警告可能在我的循环中发现select语句,所以我的循环继续?
1条答案
按热度按时间lrl1mhuk1#
我认为通过在循环中实现计数器而不是依赖
NOT FOUND
经办人: