Chinaunix首页 | 论坛 | 博客
  • 博客访问: 335023
  • 博文数量: 115
  • 博客积分: 1019
  • 博客等级: 准尉
  • 技术积分: 1104
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-22 15:02
个人简介

别想万里,要把一只脚放到另一脚的前边

文章分类

全部博文(115)

文章存档

2018年(1)

2015年(2)

2014年(31)

2013年(38)

2012年(43)

我的朋友

分类: Mysql/postgreSQL

2012-06-15 17:13:15

游标

出现的背景: SELECT 语句一般返回的是几行(一组),你想对结果中的每一行数据进行处理,怎么做? 建立的游标这个变量,可以定义游标(结果集的头/尾部)上下移动取出每一行。

怎么在MYSQL 中用游标(CURSOR) ?

1  使用游标之前,必须先定义(声明),过程还要声明绑定的SELECT 语句(声明,没有真正的取数)

2  使用游标,必须打开游标,SELECT 检索出来所有行填充游标(可见这个是一个内存区域,所以有步骤之说)

3  使用完游标,必须关闭

例子:

CREATE PROCEDURE processorders()

BEGIN

DECLARE ordernumbers CURSOR

FOR

SELECT order_num FROM orders

END;

最简单的游标定义:  定义在存储过程中,用orders select 语句填充,DECLARE 在存储过程中定义,所以,存储过程调用完毕,释放游标。当然一般游标的使用结构中,自带上:Close CURSOR_name

CREATE PROCEDURE processorders()

BEGIN

DECLARE o INT;

DECLARE done BOOLEAN DEFAULT 0;

DECLARE ordernumbers CURSOR

FOR

SELECT order_num FROM orders

-- Declare continue handler  当出现取数终止 SQLSTATE '02000' 时候 done =1

    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;

--Open the Cursor

OPEN ordernumbers;

--默认从第一行开始去数据,这样就吧第一次检索出来的order_num 复制给o

REPEAT

FETCH ordernumbers INTO o;

UNTIL done END REPEAT;

--Close the Cursor

CLOSE ordernumbers;

END;

阅读(1597) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~