MySQL 基础知识7 (使用游标)
一、游标概述
1. 基本定义:一个存储在MySQL服务器上的数据库查询, 并非一条SELECT语句, 而是被该语句检索出来的结果集
2. 主要作用:需要在获取检索数据后的行中前进或后退一行或多行, 存储游标后, 应用程序可根据需要滚动或浏览其中的数据
3. 作用范围:只能用于存储过程(和函数)
4. 使用步骤:
(1). 在能使用游标前, 必须声明(定义)它:该部分只是定义需要使用的SELECT语句
(2). 声明游标后,必须打开游标以供使用:该部分用之前定义的SELECT语句将数据实际检索出来
(3). 对于填有数据的游标, 根据需要取出(检索)各行
(4). 在结束游标使用时, 必须关闭游标
二、使用游标
1. 创建游标:DECLARE
说明:该语句的发布存在特定地次序,该语句定义的局部变量必须在定义任意游标或句柄之前,句柄必须在游标之后定义
CREATE PROCEDURE procedureorders() BEGIN -- 定义游标 DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders; -- 打开游标 OPEN ordernumbers; -- 关闭游标 CLOSE ordernumbers; END;
2. 创建游标 (检索每行数据)
说明:当游标被打开后, 可以使用FETCH语句分别访问它的每一行
CREATE PROCEDURE processorders() BEGIN -- 定义局部变量:判断是否完成和数量 DECLARE done BOOLEAN DEFAULT 0; DECLARE var INT; -- 定义游标:查询订单号 DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders; -- 定义条件:DECLARE CONTINUE HANDLER SQL条件和设置内容:FOR SQLSTATE 自定义内容 SET 设置内容; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; -- 打开游标 OPEN ordernumbers; -- 循环语句 REPEAT -- 获取订单数量 FETCH ordernumbers INTO var; -- 结束循环 UNTIL done END REPEAT; -- 关闭游标 CLOSE ordernumbers; END;
3. 创建游标 (除REPEAT语句之外, 还有循环语句用来重复执行代码)
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;
4. 调用和使用游标 (检索数据)
CALL processorders; SELECT * FROM ordertotals;
5. 删除游标 (无论是否存在)
DROP PROCEDURE IF EXISTS processorders;
网站:www.codeboy.top
公众号:橙汁就是奥润几

浙公网安备 33010602011771号