mysql5.7创建游标1064_mysql5.7 游标疑问 - 墨天轮问答

在MySQL5.7中遇到游标嵌套导致的结果多循环问题,博主创建了一个存储过程`StatisticStore3`,包含两个嵌套游标,分别针对'iphone'和'android'进行数据统计。实际执行时,每个游标循环了两次,产生四行输出,而预期只应输出两行。问题可能源于游标处理或循环控制部分的逻辑。
摘要由CSDN通过智能技术生成

CREATE PROCEDURE StatisticStore3()

BEGIN

declare _n varchar(20);

declare done int default false;

declare cur cursor for select name from store group by name;

declare continue HANDLER for not found set done = true;

open cur;

read_loop:loop

fetch cur into _n;

if done then

leave read_loop;

end if;

begin

declare c int;

declare n varchar(20);

declare total int default 0;

declare done int default false;

declare cur cursor for select name,count from store where name = 'iphone';

declare continue HANDLER for not found set done = true;

set total = 0;

open cur;

iphone_loop:loop

fetch cur into n,c;

if done then

leave iphone_loop;

end if;

set total = total + c;

end loop;

close cur;

select _n,n,total;

end;

begin

declare c int;

declare n varchar(20);

declare total int default 0;

declare done int default false;

declare cur cursor for select name,count from store where name = 'android';

declare continue HANDLER for not found set done = true;

set total = 0;

open cur;

android_loop:loop

fetch cur into n,c;

if done then

leave android_loop;

end if;

set total = total + c;

end loop;

close cur;

select _n,n,total;

end;

begin

end;

end loop;

close cur;

END;//

mysql> call StatisticStore3()//

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

| _n      | n      | total |

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

| android | iphone |    47 |

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

1 row in set (0.01 sec)

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

| _n      | n       | total |

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

| android | android |    33 |

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

1 row in set (0.01 sec)

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

| _n     | n      | total |

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

| iphone | iphone |    47 |

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

1 row in set (0.01 sec)

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

| _n     | n       | total |

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

| iphone | android |    33 |

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

1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

我想请教一下mysql5.7 ,使用嵌套游标,但是他显示多循环了1次的结果...求解

这是Mysql 5.7.19 版本

最开始的时候我定义了 游标的语句是使用group by name的结果来循环

那正常是不是应显示 android 和 iphone 各一次的结果才是对的呢

调用时如下结果输出

mysql> select @@tx_isolation//

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

| @@tx_isolation  |

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

| REPEATABLE-READ |

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

1 row in set (0.00 sec)

mysql> call StatisticStore3()//

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

| _n      | n      | total |

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

| android | iphone |    47 |

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

1 row in set (0.01 sec)

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

| _n      | n       | total |

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

| android | android |    33 |

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

1 row in set (0.01 sec)

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

| _n     | n      | total |

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

| iphone | iphone |    47 |

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

1 row in set (0.01 sec)

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

| _n     | n       | total |

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

| iphone | android |    33 |

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

1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值