MYSQL必知必会读书笔记 第二十四章 使用游标

MySQL检索操作返回一组称为结果集的行。这组返回的行都是与SQL语句相匹配的行。使用简单的SELECT语句无法得到第一行、下一行和前十行。有时候需要在检索出来的结果中前进或后退一行或多行。这就是使用游标的原因。游标(cursor)是一个存储在MySQL服务器上的数据库查询它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了cursor之后,应用程序可以根据需要滚动或浏览其中的数据。

 游标的主要作用是用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。

需要注意的是:在MYSQL中游标只能使用与存储过程中。

使用游标的几个明确的步骤:

1.在能够使用游标前,必须声明它。这个过程实际上是没有检索数据的,它只是定义要使用的SELECT 语句。

2.一旦声明后,必须打开游标以供使用。这个过程用前面定义的SELECT语句把实际检索出来。

3.对填有数据的游标,根据需要取出各行。

4.在结束游标使用时,必须关闭游标。

创建游标

CREATE PROCEDURE processorders()

BEGIN

    DECLARE  ordernumbers  CURSOR  FOR  SELECT  order_num FROM ORDERS;

END;

打开游标:open ordernumbers; 关闭游标:close  ordernumbers;如果你不明确关闭游标,MySQL将会在到达END语句时自动关闭它。


使用游标数据:

在一个游标被打开后,可以使用FETCH语句分别访问它的每一行。FETCH指定检索什么数据(所需的列),检索出来的数据存储在什么地方。它还向前移动游标中的内部指针,使下一条FETCH语句检索下一行(不重复读取同一行)。

CREATE PROCEDURE processorders()

BEGIN

--Declare  local  variables

DECLARE o   INT;

--Declare the cursor

DECLARE ordernumbers  CURSOR FOR SELECT order_num FORM orders;

--Open  the cursor

OPEN  orderitems;

--Get order number

FETCH ordernumbers INTO  o;

CLOSE  ordernumbers;

END  ;

其中FETCH用来检索当前行的order_num列(将自动从第一行开始)到一个名为o的局部声明的变量 中。对检索出的数据不做任何处理。

下面是循环检索数据从第一行到最后一行:

CREATE PROCEDURE processoders()

BEGIN

--Declare local variables

DECLARE done BOOLEAN DEFAULT 0;

DECLARE o INT;

--Decalre the cursor

DECLARE ordernumbers  CURSOR  FOR SELECT order_num FROM orders;

--Declare continue  handler

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

//它是指当SQLSTATE' 02000' 出现的时候  设置done的值为1.

OPEN ordernubers;

--LOOP through all rows

REPEAT

 --Get order number

FETCH ordernumbers   INTO o;

UNTIL  done  END  REPEAT;

CLOSE  ordernumbers;

END;

需要注意的是:DECLARE  语句定义的局部变量必须在定义任意游标或句柄之前定义,而句柄必须在游标之后定义。




你可能感兴趣的:(MYSQL必知必会读书笔记 第二十四章 使用游标)