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

Barbara Streisand
发布: 2024-10-26 14:29:30
原创
902 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!