- 游标
游标是一个存储在MYSQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。
游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据浏览或更改。
MYSQL游标只能用于存储过程(和函数) - 使用游标的步骤:
(1) 在能够使用游标前,必须声明(定义)它。此时未检索,只是定义要用SELECT语句
(2) 声明后,打开游标以供使用
(3) 对于天有数据的游标,根据需要取出(检索)各行
(4) 在结束游标使用时,必须关闭游标 - 创建游标
CREATE PROCEDURE processorders()
BEGIN
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
END;
在这个存储过程中,DECLARE语句用来定义和命名游标,这里为ordernumbers - 打开和关闭游标
OPEN ordernumbers;
CLOSE ordernumberes;
打开和关闭游标应放在存储过程进行 - 使用游标数据
CREATE PROCEDURE processorders()
BEGIN
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 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;
这个例子使用FETCH检索当前order_num到声明的名为o的变量中。
增加另一个名为t的变量,存储每个订单的合计。
当此处FETCH在REPEAT内,因此它反复执行到done为止。
在前面用DEFAULT 0定义变量done。
CONTINUE HANDLER,是在条件出现时被执行的代码。SQLSTATE ‘02000’出现时,SET done=1。
在此存储过程运行中创建了一个新表,这个表将保存存储过程生成的结果。FETCH取每个order_num,然后用CALL执行另一个存储过程来来计算每个订单的带税的合计(结果存储到t)。最后,用INSERT保存每个订单的订单号和合计。
MYSQL学习笔记(二十)使用游标
最新推荐文章于 2022-05-12 15:19:40 发布