存储过程中无数据警告:“错误 1329:获取、选择或处理零行”
在数据库编程中,存储过程通常用于封装复杂的操作并确保数据完整性。然而,有时这些过程可能会遇到错误或产生意外的警告。一个常见问题是“错误 1329:无数据 - 提取、选择或处理零行”消息。
当存储过程未显式处理没有返回数据的情况时,通常会出现此警告。为了解决这个问题,必须正确处理“NOT FOUND”情况。在 MySQL 中,这可以使用 CONTINUE HANDLER 语句来实现。
考虑以下testing_proc存储过程:
CREATE PROCEDURE `testing_proc`()
READS SQL DATA
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE l_name VARCHAR(20);
DECLARE my_cur CURSOR FOR
SELECT name FROM customer_tbl;
OPEN my_cur;
my_cur_loop:
LOOP FETCH my_cur INTO l_name;
IF done = 1 THEN
LEAVE my_cur_loop;
END IF;
INSERT INTO names_tbl VALUES(l_name);
END LOOP my_cur_loop;
CLOSE my_cur;
END
如果此过程在 customer_tbl 表中没有任何数据的情况下运行,则会触发“错误 1329”警告。为了防止这种情况,我们可以在过程末尾添加以下 CONTINUE HANDLER 语句:
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
该语句告诉 MySQL如果未找到行,则将 did 变量设置为 1。这将导致游标循环退出,从而防止错误发生。
或者,也可以通过在涉及表的过程末尾添加一条“虚拟”语句来绕过警告,并且会成功,如:
SELECT name INTO l_name FROM customer_tbl LIMIT 1;
该语句将确保获取一行,清除警告。
通过正确处理通过“NOT FOUND”条件或添加虚拟语句,可以消除不返回任何数据的存储过程中的“Error 1329”警告。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3