全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

mysql怎么循环游标

发布时间:2023-07-21 11:18:14
发布人:xqq

mysql之游标

游标:能够对结果集中的每一条记录进行定位,并对指向的记录中的数据进行操作的数据结构。

创建游标: CREATE FUNCTION 函数名称 (参数)RETURNS 数据类型 程序体

存储过程中使用游标的4个步骤:定义游标、打开游标、读取游标数据和关闭游标。

定义游标: DECLARE 游标名 CURSOR FOR 查询语句

打开游标: OPEN 游标名称;

读取游标数据: FETCH 游标名 INTO 变量列表;

关闭游标: CLOSE 游标名;

条件处理语句: DECLARE 处理方式[CONTINUE 或EXIT] HANDLER FOR 问题 操作;

流程控制语句:跳转语句(ITERATE语句和LEAVE语句)、循环语句(LOOP、WHILE、REPEAT)、条件判断语句(IF语句和CASE语句)

创建游标: CREATE FUNCTION 函数名称 (参数)RETURNS 数据类型 程序体

存储函数与存储过程很像,但有几个不同点:

1、存储函数必须返回一个值或者数据表,存储过程可以不返回。

2、存储过程可以通过CALL语句调用,存储函数不可以

3、存储函数可以放在查询语句中使用,存储过程不可以

4、存储过程的功能更强大,包括能够执行对表的操作(比如创建表、删除表等)和事务操作

游标操作步骤包含4个:定义游标、打开游标、读取游标数据和关闭游标。

1、创建存储过程

mysql存储过程游标done条件

MySQL 存储过程中,使用游标查询,返回的是结果集时,如何查看调用存储过程输出结果呢?

解决方案:存储过程不返回数据,但它能创建和填充另一个表。所以在存储过程运行中创建临时表。该临时表将保存存储过程中生成的结果集,在遍历游标时,用insert保存每条数据到临时表中。后续调用时可以用select语句查询临时表中的存储过程运行结果。

以下有 三种方式 使用游标创建一个存储过程,统计某一部门下的员工信息

方法一:Loop循环

调用存储过程:

方法二:While 循环

调用存储过程:

方法三:REPEAT 循环

调用存储过程:

上述三种实现方法在测试过程中遇到下述问题。

调用存储过程查询临时表输出结果时,会发现多循环了一次,像这样:

解决方法:

在遍历游标查询结果时,先判断游标的结束标志(done) 是否是为1,如果不是1,则向临时表中插入数据。

mysql里怎样循环遍历游标

--传入id,输出name和sex的存储过程,这里同个id有多条数据,所以需要用到游标。

DELIMITER //

CREATE PROCEDURE p5(IN v_id INT)

BEGIN

DECLARE nodata INT DEFAULT 0;#注意:这个变量声明必须放在游标声明前面

DECLARE v_name VARCHAR(30);

DECLARE v_sex CHAR(3);

DECLARE c_ns CURSOR FOR SELECT NAME,sex FROM t WHERE id = v_id;

DECLARE EXIT HANDLER FOR NOT FOUND SET nodata = 1;#当读到数据的最后一条时,设置变量为1

OPEN c_ns;

WHILE nodata = 0 DO#判断是不是到了最后一条数据

FETCH c_ns INTO v_name,v_sex;

SELECT v_name,v_sex,nodata;

END WHILE;  

CLOSE c_ns;

END

//

--执行该存储过程

mysql call p5(2);

+--------+-------+--------+  

| v_name | v_sex | nodata |  

+--------+-------+--------+  

| song   | 女    |      0 |  

+--------+-------+--------+  

1 row in set (0.04 sec)  

  

+--------+-------+--------+  

| v_name | v_sex | nodata |  

+--------+-------+--------+  

| dan    | 男    |      0 |  

+--------+-------+--------+  

1 row in set (0.05 sec)  

  

Query OK, 0 rows affected, 1 warning (0.05 sec)

--注意:CONTINUE  会继续当前的block 中的语句, 它在set done=1 后继续执行下一个语句。EXIT  则在 set done=1 后离开当前的语句块

所以这里用了EXIT(黄色阴影部分).

如果是continue,结果如下:

mysql call p5(2);  

    - //  

+--------+-------+  

| v_name | v_sex |  

+--------+-------+  

| song   | 女    |  

+--------+-------+  

1 row in set (0.00 sec)  

  

+--------+-------+  

| v_name | v_sex |  

+--------+-------+  

| dan    | 男    |  

+--------+-------+  

1 row in set (0.01 sec)  

  

+--------+-------+  

| v_name | v_sex |  

+--------+-------+  

| dan    | 男    |  

+--------+-------+  

1 row in set (0.02 sec)  

  

Query OK, 0 rows affected, 1 warning (0.03 sec)

千锋教育是专业的IT培训机构,提供java培训、大数据培训python培训web前端培训等专业IT技能提升服务,如果您有IT培训需求,欢迎联系千锋教育。

#mysql游标循环

相关文章

项目目标有哪些?

项目目标有哪些?

2023-10-15
为什么Delphi的编译速度很快?

为什么Delphi的编译速度很快?

2023-10-15
任务管理系统的优势是什么?

任务管理系统的优势是什么?

2023-10-15
c#为什么不脱离.net平台?

c#为什么不脱离.net平台?

2023-10-15

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取