首页  >  文章  >  数据库  >  如何处理 MySQL 存储过程中的“错误 1329:无数据 - 获取零行”?

如何处理 MySQL 存储过程中的“错误 1329:无数据 - 获取零行”?

Barbara Streisand
Barbara Streisand原创
2024-10-26 14:29:30903浏览

How to Handle

存储过程中无数据警告:“错误 1329:获取、选择或处理零行”

在数据库编程中,存储过程通常用于封装复杂的操作并确保数据完整性。然而,有时这些过程可能会遇到错误或产生意外的警告。一个常见问题是“错误 1329:无数据 - 提取、选择或处理零行”消息。

当存储过程未显式处理没有返回数据的情况时,通常会出现此警告。为了解决这个问题,必须正确处理“NOT FOUND”情况。在 MySQL 中,这可以使用 CONTINUE HANDLER 语句来实现。

考虑以下testing_proc存储过程:

<code class="sql">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</code>

如果此过程在 customer_tbl 表中没有任何数据的情况下运行,它将触发“错误 1329”警告。为了防止这种情况,我们可以将以下 CONTINUE HANDLER 语句添加到过程的末尾:

<code class="sql">DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;</code>

该语句告诉 MySQL 如果没有找到行,则将 did 变量设置为 1。这将导致游标循环退出,从而防止错误发生。

或者,也可以通过在涉及表的过程末尾添加一条“虚拟”语句来绕过警告,并且会成功,例如:

<code class="sql">SELECT name INTO l_name FROM customer_tbl LIMIT 1;</code>

此语句将确保提取一行,从而清除警告。

通过正确处理“NOT FOUND”条件或添加虚拟语句,可以消除不返回任何数据的存储过程中的“错误 1329”警告。

以上是如何处理 MySQL 存储过程中的“错误 1329:无数据 - 获取零行”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn