概述
游标
有时,需要在检索出来的行中前进或后退一行或多行
游标是一个存储在MySQL服务器上的数据库查询
是被SELECT检索出来的结果集
存储了游标后,
应用可根据需要滚动或浏览其中的数据
MySQL游标只能用于存储过程[和函数]
使用游标
- 在能使用游标前,需先声明它
只是定义要使用的SELECT语句
- 一旦声明后,
必须打开游标以供使用
过程用前面定义的SELECT语句把数据实际检索出来
- 对填有数据的游标,需取出[检索]各行
- 结束游标使用时,需关闭游标
创建游标
DECLARE
CREATE PROCEDURE processorders()
BEGIN
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
END;
DECLARE用来定义和命名游标
存储过程处理完后,游标消失
打开和关闭游标
OPEN ordernumbers;
CLOSE ordernumbers;// 释放游标使用的所有内部内存和资源
一个游标关闭后,需重新打开
如不明确关闭游标,MySQL将会在到达END时自动关闭它
CREATE PROCEDURE processorders()
BEGIN
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
OPEN ordernumbers;
CLOSE ordernumbers;
END;
存储过程,
声明
打开
关闭
一个游标
使用游标数据
一个游标被打开后,
可使用FETCH语句分别访问它的每一行
FETCH指定检索什么数据
检索出的数据存储在什么地方
还向前移动游标中的内部行指针,使下一条FETCH语句检索下一行[不重读读取同一行]
- 从游标中检索单个行
CREATE PROCEDURE processorders()
BEGIN
DECLARE o INT;
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
OPEN ordernumbers;
FETCH ordernumbers INTO o;
CLOSE ordernumbers;
END;
FETCH用来检索当前行的order_num列到一个名为o的局部声明的变量
- 循环检索数据,从第一行到最后一行
CREATE PROCEDURE processorders()
BEGIN
DECLARE done BOOLEAN DEFAULT 0;
DECLARE o INT;
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN ordernumbers;
REPEAT
FETCH ordernumbers INTO o;
UNTIL done END REPEAT;
CLOSE ordernumbers;
END;
反复执行FETCH,直到done为1
SQLSTATE '02000'是一个未找到条件
当REPEAT由于没有更多的行供循环而不能继续时,
出现此条件
DECLARE语句次序
DECLARE语句的发布存在特定的次序
用DECLARE语句定义的局部变量必须在定义任意游标或句柄前定义
句柄必须在游标后定义
局部变量
游标
句柄
CREATE PROCEDURE processorders()
BEGIN
DECLARE done BOOLEAN DEFAULT 0;
DECLARE o INT;
DECLARE t DECIMAL(8, 2);
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
CREATE TABLE IF NOT EXISTS ordertotals
(order_num INT, total DECIMAL(8, 2));
OPEN ordernumbers;
REPEAT
FETCH ordernumbers INTO o;
CALL ordertotal(o, 1, t);// 另一个存储过程
INSERT INTO ordertotals(order_num, total)
VALUES(o, t);
UNTIL done END REPEAT;
CLOSE ordernumbers;
END;
SELECT *
FROM ordertotals;
最后
以上就是糊涂大船为你收集整理的1-7:使用游标的全部内容,希望文章能够帮你解决1-7:使用游标所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复