刚刚,使用存储过程的时候遇到了一个问题,我在存储过程内使用游标去遍历 拥有角色的用户,然后去生成根据用户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中使用游标来循环处理查询结果。通过定义游标、打开游标、获取数据、处理数据、关闭游标这一系列步骤,我们可以有效地对查询结果进行逐行处理。这种技术特别适用于需要对每一行数据进行复杂...
1. **隐式游标**:在PL/SQL中,每次执行DML语句(如SELECT、INSERT、UPDATE、DELETE)时,系统都会自动使用隐式游标。隐式游标提供了一些内置的属性,如%ROWCOUNT(返回受影响的行数)、%FOUND(检查是否找到数据)...
个人看完视频总结的游标小结,如有差错请多指教
在文章中通过设置事务控制,确保数据的完整性和一致性,特别是在使用Pass-Through游标时,事务控制能够帮助确保更新操作是安全且有效的。 总结而言,本文深入探讨了如何通过VFP的Pass-Through游标和编程方法来更新...
1. 声明游标:使用 DECLARE CURSOR 语句定义 Transact-SQL 服务器游标的属性。 2. 打开游标:使用 OPEN 语句打开游标,准备提取数据。 3. 提取数据:使用 FETCH 语句提取某一行的数据,并将其存储到变量中。 4. 关闭...
计算机后端-PHP视频教程. php与mysql加强- 04. php加强42-数组游标操作.wmv
在 SQL 中,声明游标使用 `DECLARE` 语句,例如: ```sql DECLARE cursor_name CURSOR FOR SELECT * FROM table_name; ``` 其中,`cursor_name` 是游标的名称,`SELECT * FROM table_name` 是游标所指向的记录集。 ...
虽然使用游标实现分页在性能上可能不如现代SQL Server中推荐的`OFFSET-FETCH`子句高效,但该方法仍能帮助我们深入理解游标和分页的基本原理,特别是在SQL Server早期版本或特定业务场景下的应用。对于初学者而言,...
下面我们将深入探讨如何使用存储过程和游标来实现这一目标。 首先,我们有两个表:`zyy_user`(父表)和`zyy_manage_user`(子表)。`zyy_user`表有主键`id`,以及字段`real_name`、`birthday`和`email`。`zyy_...
这篇博文可能是探讨如何在MySQL中使用游标,特别是当游标执行到最后一行后如何正确地结束循环。虽然没有提供具体的博文内容,但我们可以根据一般知识来深入理解这个主题。 游标的基本概念: 游标允许程序员逐行处理...
简单循环处理 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 游标、带表和数显异型卡尺》是一项全面涵盖游标卡尺、带表卡尺和数显卡尺设计、制造、检验和使用的标准,对于提升我国制造业的测量精度和产品质量有着重要的作用。理解和掌握这一标准,...
在Python 3.x中,由于`mysql-python`库不再维护,推荐使用`pymysql`或`mysql-connector-python`作为替代。`pymysql`是社区维护的一个兼容`MySQLdb`的库,而`mysql-connector-python`是MySQL官方提供的Python驱动,...
本压缩包包含了一份“纸质游标尺.pdf”文件,它可能是对纸质游标尺的设计原理、制作方法、使用技巧以及在不同领域的应用进行详细讲解的文档。 游标尺的基本结构包括主尺和游标,游标可以在主尺上移动,通过比较读数...
### SQL游标深入解析与应用案例 #### 一、SQL游标基础...然而,需要注意的是,过度使用游标可能会导致性能问题,因为它们涉及到较多的系统资源消耗。因此,在实际开发过程中,需要根据具体场景来决定是否使用游标。
Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。...案例中的7-游标使用很可能是对各种游标操作的具体示例,如打开、关闭、提取数据、循环处理等,有助于加深理解并提高实践能力。
值得注意的是,虽然MySQL-python适用于Python 2.x版本,但Python 2已不再维护,建议升级到Python 3,并使用更现代的库如`pymysql`或`mysql-connector-python`。这些库对Python 3有更好支持,并提供了更多的功能和...
在MySQL中,创建游标需要使用`DECLARE`语句,语法如下: ``` DECLARE cursor_name CURSOR FOR select_statement; ``` 例如: ``` DECLARE calc_bonus CURSOR FOR SELECT id, salary, commission FROM employees; ```...