博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL存储过程之游标
阅读量:4520 次
发布时间:2019-06-08

本文共 1132 字,大约阅读时间需要 3 分钟。

  游标相关操作:

DECLARE 
CURSOR FOR SELECT ... ; /* 声明游标 */OPEN
; /* 打开游标 */FETCH
INTO variable [,variable] ; /* 提取游标内容 */CLOSE
; /* 关闭游标 */

  下面是使用游标的一个示例:

1 CREATE PROCEDURE p25 (OUT return_val INT) 2 BEGIN 3     DECLARE a,b INT; 4     DECLARE cur_1 CURSOR FOR SELECT s1 FROM t; 5     DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1; 6     OPEN cur_1; 7     REPEAT 8         FETCH cur_1 INTO a; 9         UNTIL b = 110     END REPEAT;11     CLOSE cur_1;12     SET return_val = a;13 END;//

  1) 代码开始声明三个变量,另外,声明顺序十分重要:先声明变量,再声明条件,再后声明游标,最后才声明错误处理.否则系统提示错误信息.

  2) OPEN cur_1;打开游标,它与SELECT s1 FROM t语句是关联的,过程将执行该sql语句并返回一个结果集.

  3) FETCH cur_1 INTO a;从SELECT产生的结果集中获取一行数据.

  4) 最后MySQL的FETCH没有获取数据时,NO FOUND的异常处理被触发将变量b赋值1从而导致循环退出.然后可手动关闭游标,也可由系统关闭.

 

游标的特性: 只读属性; 顺序读取; 敏感.

  5.0版的MySQL中,只能从游标中取值,不能对其进行更新.可以如下方式将游标中的数据更新到其他数据表中:

1 FETCH cursor1 INTO variable1;   2 UPDATE t1 SET column1 = 'value1' WHERE CURRENT OF cursor1;

  游标也是不可以回滚的,只允许逐一读取下一行,不能在结果集中前进或后退.

  同时,游标也不允许在已打开的游标中进行操作的表上执行update操作.

 

转载于:https://www.cnblogs.com/free-coder/p/4776160.html

你可能感兴趣的文章
深入浅出 Java Concurrency (17): 并发容器 part 2 ConcurrentMap (2)[转]
查看>>
【 HYSBZ - 2440 】完全平方数 (莫比乌斯函数容斥)
查看>>
最优矩阵链乘
查看>>
2012年软件大赛校内选拔赛
查看>>
2017 Java面试大全(一)
查看>>
PHP实现四种基本排序算法
查看>>
Poj3414广搜
查看>>
云南南天电子信息产业股份有限公司某站SQL注入漏洞
查看>>
09-C#笔记-循环
查看>>
3.20下午
查看>>
AngularJS之代码风格36条建议【一】(九)
查看>>
linux指令和文件系统
查看>>
java上传xml文件
查看>>
板邓:给网站添加favicon图标
查看>>
Tomcat分析-启动过程
查看>>
IOS开发-基于WebDriverAgent代理服务,实现iOS手机app自动化测试的框架搭建
查看>>
实现JS数组的深拷贝
查看>>
xStream完美转换XML、JSON(转)
查看>>
code::Blocks 汉化经验
查看>>
(2017.10.10) 我对 JavaScript 历史的认识
查看>>