MySQL存储过程之游标
2015-09-01 16:55
489 查看
游标相关操作:
下面是使用游标的一个示例:
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中,只能从游标中取值,不能对其进行更新.可以如下方式将游标中的数据更新到其他数据表中:
游标也是不可以回滚的,只允许逐一读取下一行,不能在结果集中前进或后退.
同时,游标也不允许在已打开的游标中进行操作的表上执行update操作.
DECLARE <cursor-name> CURSOR FOR SELECT ... ; /* 声明游标 */ OPEN <cursor-name> ; /* 打开游标 */ FETCH <cursor-name> INTO variable [,variable] ; /* 提取游标内容 */ CLOSE <cursor-name>; /* 关闭游标 */
下面是使用游标的一个示例:
CREATE PROCEDURE p25 (OUT return_val INT) BEGIN DECLARE a,b INT; DECLARE cur_1 CURSOR FOR SELECT s1 FROM t; DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1; OPEN cur_1; REPEAT FETCH cur_1 INTO a; UNTIL b = 1 END REPEAT; CLOSE cur_1; SET return_val = a; 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中,只能从游标中取值,不能对其进行更新.可以如下方式将游标中的数据更新到其他数据表中:
FETCH cursor1 INTO variable1; UPDATE t1 SET column1 = 'value1' WHERE CURRENT OF cursor1;
游标也是不可以回滚的,只允许逐一读取下一行,不能在结果集中前进或后退.
同时,游标也不允许在已打开的游标中进行操作的表上执行update操作.
相关文章推荐
- mysql索引及类型
- mysql索引
- MySQL锁
- 用一个bat方法 快速进入mysql的cmd
- 提高mysql的写入效率
- MySQL的biglog文件操作
- 数据库-mysql如何优化和改善数据库的性能
- Mysql的存储引擎之:ARCHIVE存储引擎
- table_cache – MySQL性能调优
- table_cache – MySQL性能调优
- table_cache – MySQL性能调优
- mysql错误: waiting for table metadata lock
- mysql 基本SQL语句
- mysql 自增字段的设置
- MyBatis传入多个参数的问题
- mysql MVCC
- Mysql服务
- 设置Mysql密码
- Mysql的存储引擎之:CSV存储引擎
- mysql中engine=innodb和engine=myisam的区别