`
inspires
  • 浏览: 16040 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MySQL-使用游标循环中断的问题

阅读更多

原文戳我

刚刚,使用存储过程的时候遇到了一个问题,我在存储过程内使用游标去遍历 拥有角色的用户,然后去生成根据用户id生成每日统计记录。

 

1
2
    declare cur cursor for (SELECT v_user_id FROM v_user_role where v_role_id = role_id);-- 查询角色下的用户
    declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stops=1;

 

我发现在某个角色下有48个用户,而生成的记录却只有20条,其他角色都是正确的,冥思苦想实在找不出好的办法,遂修改了下游标的语句。

 

1
declare cur cursor for (SELECT user_id FROM user_role where role_id = role_id order by create_time desc);-- 查询角色下的用户

 

发现结果有变化,竟然遍历出了47个角色,我百思不得其解,这个表里面是没有NULL数据的,为何游标运行时会中断呢?我找了一个mysql的大

神,问他,他说出现空值的时候游标会中断,wk,这里没有空值啊! 他叫我在 “fecth之前 加 set flag=0”,他说的flag就是我的stops啦,

我试了下,果然出来的记过是正确的,神奇啊!

部分代码

 

1
2
3
4
5
 WHILE stops <> 1 DO
        -- some work code     
            SET stops = 0;
            FETCH cur INTO user_id;
 END WHILE;

 

如此就可以让结果正确,我觉得需要知道原因,遂google了很多资料还是没有得到真正原因以及原理所在。待查证……

后来发现,这是MySQL的一个bug,属于间歇性发作的,以后在用游标和循环时,接加上这个就行了。如果哪位大神知道其中的原理不烦告诉我sandy_lj@sina.cn

不胜感激。

 

分享到:
评论

相关推荐

    Mysql游标(循环操作)

    本例展示了如何在MySQL中使用游标来循环处理查询结果。通过定义游标、打开游标、获取数据、处理数据、关闭游标这一系列步骤,我们可以有效地对查询结果进行逐行处理。这种技术特别适用于需要对每一行数据进行复杂...

    Oracle入门--Oracle游标使用

    1. **隐式游标**:在PL/SQL中,每次执行DML语句(如SELECT、INSERT、UPDATE、DELETE)时,系统都会自动使用隐式游标。隐式游标提供了一些内置的属性,如%ROWCOUNT(返回受影响的行数)、%FOUND(检查是否找到数据)...

    MySQL总结--游标理解

    个人看完视频总结的游标小结,如有差错请多指教

    也谈SQL Pass-Through游标更新.pdf

    在文章中通过设置事务控制,确保数据的完整性和一致性,特别是在使用Pass-Through游标时,事务控制能够帮助确保更新操作是安全且有效的。 总结而言,本文深入探讨了如何通过VFP的Pass-Through游标和编程方法来更新...

    13_4 SQL编程基础-T-SQL游标.pptx

    1. 声明游标:使用 DECLARE CURSOR 语句定义 Transact-SQL 服务器游标的属性。 2. 打开游标:使用 OPEN 语句打开游标,准备提取数据。 3. 提取数据:使用 FETCH 语句提取某一行的数据,并将其存储到变量中。 4. 关闭...

    计算机后端-PHP视频教程. php与mysql加强- 04. php加强42-数组游标操作.wmv

    计算机后端-PHP视频教程. php与mysql加强- 04. php加强42-数组游标操作.wmv

    11-3--游标Cursor1

    在 SQL 中,声明游标使用 `DECLARE` 语句,例如: ```sql DECLARE cursor_name CURSOR FOR SELECT * FROM table_name; ``` 其中,`cursor_name` 是游标的名称,`SELECT * FROM table_name` 是游标所指向的记录集。 ...

    sqlserver --游标 实现数据分页

    虽然使用游标实现分页在性能上可能不如现代SQL Server中推荐的`OFFSET-FETCH`子句高效,但该方法仍能帮助我们深入理解游标和分页的基本原理,特别是在SQL Server早期版本或特定业务场景下的应用。对于初学者而言,...

    存储过程-游标-级联删除

    下面我们将深入探讨如何使用存储过程和游标来实现这一目标。 首先,我们有两个表:`zyy_user`(父表)和`zyy_manage_user`(子表)。`zyy_user`表有主键`id`,以及字段`real_name`、`birthday`和`email`。`zyy_...

    mysql游标实现到了最后一个结束之后结束循环

    这篇博文可能是探讨如何在MySQL中使用游标,特别是当游标执行到最后一行后如何正确地结束循环。虽然没有提供具体的博文内容,但我们可以根据一般知识来深入理解这个主题。 游标的基本概念: 游标允许程序员逐行处理...

    关于游标使用sql

    简单循环处理 DECLARE @id INT, @value VARCHAR(10); BEGIN -- 定义游标. DECLARE c_test_main CURSOR FAST_FORWARD FOR SELECT id, value FROM test_main; -- 打开游标. OPEN c_test_main; --...

    JBT 11102-2011 游标、带表和数显异型卡尺.zip

    总结来说,《JBT 11102-2011 游标、带表和数显异型卡尺》是一项全面涵盖游标卡尺、带表卡尺和数显卡尺设计、制造、检验和使用的标准,对于提升我国制造业的测量精度和产品质量有着重要的作用。理解和掌握这一标准,...

    mysql-python安装包

    在Python 3.x中,由于`mysql-python`库不再维护,推荐使用`pymysql`或`mysql-connector-python`作为替代。`pymysql`是社区维护的一个兼容`MySQLdb`的库,而`mysql-connector-python`是MySQL官方提供的Python驱动,...

    行业文档-设计装置-纸质游标尺.zip

    本压缩包包含了一份“纸质游标尺.pdf”文件,它可能是对纸质游标尺的设计原理、制作方法、使用技巧以及在不同领域的应用进行详细讲解的文档。 游标尺的基本结构包括主尺和游标,游标可以在主尺上移动,通过比较读数...

    SQL游标深处 游标案例 没有说明 自己看

    ### SQL游标深入解析与应用案例 #### 一、SQL游标基础...然而,需要注意的是,过度使用游标可能会导致性能问题,因为它们涉及到较多的系统资源消耗。因此,在实际开发过程中,需要根据具体场景来决定是否使用游标。

    Oracle游标使用案例大全

    Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。...案例中的7-游标使用很可能是对各种游标操作的具体示例,如打开、关闭、提取数据、循环处理等,有助于加深理解并提高实践能力。

    MySQL-python-1.2.2.win32-py2.6

    值得注意的是,虽然MySQL-python适用于Python 2.x版本,但Python 2已不再维护,建议升级到Python 3,并使用更现代的库如`pymysql`或`mysql-connector-python`。这些库对Python 3有更好支持,并提供了更多的功能和...

    MySql游标的使用实例

    在MySQL中,创建游标需要使用`DECLARE`语句,语法如下: ``` DECLARE cursor_name CURSOR FOR select_statement; ``` 例如: ``` DECLARE calc_bonus CURSOR FOR SELECT id, salary, commission FROM employees; ```...

Global site tag (gtag.js) - Google Analytics