1、MYSQL游标 只能用于 存储过程 和 函数。
2、不是select语句,而是select的结果集,游标可以一行一行地处理,适用于交互式应用。
3、简单的创建、打开、使用和关闭(都要在存储过程内)
1)创建DECLARE
DECLARE xxx CURSOR FOR SELECT ……
![baa0299ed84a33dc86c71f27b45c9879.png](https://i-blog.csdnimg.cn/blog_migrate/064206ed773e1a7ce13ebb9e36db82d9.png)
2)打开OPEN (查询实际在此时进行) 和关闭CLOSE
OPEN xxx;
CLOSE xxx;
注意,MYSQL游标只能用于存储过程(和函数),所以……open cursor语句应当存储过程内,单独会报错。数据库 MYSQL 使用open cursor语句总是出现错误??
![74c8bbc1ba3f5d8bbd196f86dfbe6bfe.png](https://i-blog.csdnimg.cn/blog_migrate/4c2b45939fb305a272e18fd1aced6250.png)
3)使用FETCH访问每一行
![db79ddb00c3ffd452bb0cb2412b380b7.png](https://i-blog.csdnimg.cn/blog_migrate/6941b1c34ca90e0847224536ccb3a72b.png)
![30b145e713ca48c48916b4e1c68c07a0.png](https://i-blog.csdnimg.cn/blog_migrate/9f7cd05f4d0b17f3412f009b50bd3b09.png)
done是循环结束判断标志
CONTINUE HANDLER是满足条件就执行代码,意思是满足SQLSTATE '02000'时(REPEAT没有更多行供循环时)SET done=1.
4、以上只是将结果保存到变量o,但变量o的值没有拿出来。
现将每一行结果整合保存成新的表:
![ef96a6549fafaab6b85ca833299d1c4f.png](https://i-blog.csdnimg.cn/blog_migrate/535434687adca85b64c1e53d793d5b0a.png)
结果放在另一张表中,查看结果:
![b1a95edaecbeeed74e32e3c9cecdd38f.png](https://i-blog.csdnimg.cn/blog_migrate/e478e4f97aae15ff654cb88f38bdb158.png)
为什么表不存在?
因为上述create procedure只是创建,相当于声明,还没有call procedure……
![b7e4ef18bd49e1ac272b64f4ca0d00eb.png](https://i-blog.csdnimg.cn/blog_migrate/e527b3b453b1416f65a8299510bc8451.png)