mysql 游标_《MySQL必知必会》学习笔记 10 使用游标

1、MYSQL游标 只能用于 存储过程 和 函数

2、不是select语句,而是select的结果集,游标可以一行一行地处理,适用于交互式应用。

3、简单的创建、打开、使用和关闭(都要在存储过程内)

1)创建DECLARE

DECLARE xxx CURSOR FOR SELECT ……

baa0299ed84a33dc86c71f27b45c9879.png

2)打开OPEN (查询实际在此时进行) 和关闭CLOSE

OPEN xxx;
CLOSE xxx;

注意,MYSQL游标只能用于存储过程(和函数),所以……open cursor语句应当存储过程内,单独会报错。数据库 MYSQL 使用open cursor语句总是出现错误??

74c8bbc1ba3f5d8bbd196f86dfbe6bfe.png

3)使用FETCH访问每一行

db79ddb00c3ffd452bb0cb2412b380b7.png
FETCH将一行结果(第1次执行就是第1行)保存到变量o中,但不做任何处理

30b145e713ca48c48916b4e1c68c07a0.png
使用LOOP对每行FETCH,保存每一行结果

done是循环结束判断标志

CONTINUE HANDLER是满足条件就执行代码,意思是满足SQLSTATE '02000'时(REPEAT没有更多行供循环时)SET done=1.

4、以上只是将结果保存到变量o,但变量o的值没有拿出来。

现将每一行结果整合保存成新的表:

ef96a6549fafaab6b85ca833299d1c4f.png
fetch每一行传给o,拿着o调用另一个procedure,更新变量t的值,最后将这一对(o,t)一起存入新表

结果放在另一张表中,查看结果:

b1a95edaecbeeed74e32e3c9cecdd38f.png

为什么表不存在?

因为上述create procedure只是创建,相当于声明,还没有call procedure……

b7e4ef18bd49e1ac272b64f4ca0d00eb.png
先call procedure,里面的语句才能执行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值