24 游标
来源:互联网 发布:java ee怎么下载 编辑:程序博客网 时间:2024/05/22 13:48
为什么使用游标
有时需要在检索出来的行中前进或后移。
MySQL游标只能用于存储过程(存储过程完成后,游标就会消失)。
游标主要应用于交互式应用,用户需要滚动屏幕上的数据,并对数据进行浏览或做出修改。
使用游标步骤:
1、使用前必须声明(declare),这个过程并没有检索数据,只是定义要使用的selete语句;
2、一旦声明,必须打开(open)以供使用。这个过程用selete把数据实际检索出来;
3、对于填索数据的游标,根据需要取出各行;
4、在结束游标使用时,必须关闭(close)。
创建游标-declare
例:
create procedure processorders()begin declare ordernumberscursor //ordernumbers游标名 for selete orders_num from orders;end;
打开/关闭游标
open ordernumbers;close ordernumbers; //close释放游标使用的所有内存和资源。
注:一个游标关闭后,如果没有重新打开,则不能使用。
使用游标访问数据–fetch
例1:
create procedure processorders()begin declare o INT; //声明变量 o declare ordernumbers cursor //声明并定义游标ordernumbers for selete orders_num from orders; open ordernumbers; fetch ordernumbers into o; //fetch检索当前行的orders_num列到一个名为o的局部声明的变量中 close ordernumbers; end;
例2:循环检索
create procedure processorders()begin declare done BOOLEAN default 0; //声明变量done,用于控制循环 declare o INT; declare ordernumbers cursor //声明并定义游标ordernumbers for selete orders_num from orders; declare CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; //当SQLSTATE '02000' 出现时,done=1。当没有更多的行供循环时,会出现这个条件。 open ordernumbers; repeat fetch ordernumbers into o; until done end repeat; //反复执行直到done为真 close ordernumbers; end;
**注:**declare语句定义的局部变量,必须在定义任意游标之前定义,而句柄必须在游标之后定义。
(游标类似于编程语言如C++中的指针,声明并初始化之后才能使用;fetch类似于‘*’,访问数据;repeat相当于for,循环游标)
例3:
create procedure processorders()begin declare done BOOLEAN default 0; declare o INT; declare t decimal(8,2); //新的变量t declare ordernumbers cursor for selete orders_num from orders; declare continue handler for SQLstate'02000' set done=1; //当SQLSTATE '02000' 出现时,done=1。当没有更多的行供循环时,会出现这个条件。 create table if not exist ordertotal //创建一个表,用于存储结果 (order_num int,total decimal(8,2)); open ordernumbers; repeat fetch ordernumbers into o; call ordertotal(o,1,t); insert into ordertotal (order_num,total) values(o,t); until done end repeat; //反复执行直到done为真 close ordernumbers; end;
阅读全文
0 0
- 24 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 游标
- 设备树详解
- list indices must be integers or slices, not tuple
- PHP数组分页,PHP数组分页操作
- 第4讲项目-计算圆柱体的表面积
- 3377数据结构实验之查找五:平方之哈希表
- 24 游标
- linux常用命令复习总结
- python 寻找list中最大元素对应的索引
- 在线文字推理网站
- Xcode8项目名修改
- 上升子序列
- 【帝国CMS】灵动标签调用标题图片没有图片时显示默认图片
- linux-xcomm_zynq 编译
- "_OBJC_CLASS_$_<#文件名#>", referenced from: