游标是一个存储在MySQL服务器上的数据库查询,是一个结果集。是保存查询结果的一个临时区域。
有时需要在检索出来的行中浅见或后退一行或者多行。这就是使用游标的原因。
MySQL游标只能用于存储过程和函数。
游标的使用:
1.使用前必须先定义游标
2.一旦声明后,必须打开游标以供使用
3.对于填有数据的游标,根据需要检索各行
4.结束游标使用时,必须关闭游标
创建游标
游标用declare创建,并定义相应的select语句

这个存储过程定义了名为ordernum的游标,保存了一个结果集。存储过程处理完后,游标就消失。
打开和关闭游标使用OPEN 和 CLOSE
如果你不明确关闭游标,MySQL会在到达END语句时自动关闭它。

这个存储过程声明、打开和关闭一个游标。但对检索出的数据什么也没做。
使用游标数据
在一个游标被打开后,可以使用FETCH语句分别访问它的每一行。FETCH指定检索什么数据(所需的列),检索出来的数据存储在什么地方。它还向前移动游标中的内部行指针,使下一条FETCH语句检索下一行(不重复读取同一行)。
看一个例子,从游标中检索单个行(第一行)

循环检索数据,从第一行到最后一行

定义了done 变量为布尔值默认为0,通过done来判断是否结束repeat循环。done怎样在结束时被设置为真呢?通过下面语句:
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done =1;
我查询了一下,这句类似一个默认语句,它所表达的意思是:若没有数据返回,程序继续,并将done设置为真。SQLSTATE ‘02000’ 是一个未找到条件。这个语句等价于
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done =1;
注:declare语句存在特定次序。用declare语句定义的局部变量必须在游标或句柄(handle)之前定义,句柄必须在游标之后定义。
网友评论