MySQL游标

1. 游标的概念

游标本质:查询后的结果集。对查询的结果集进行前一行或后一行类似的操作时就可以使用到游标

2. 游标的语法

1. 语法

  • 定义游标: declare 游标名称 cursor for 查询语句;
  • 打开游标: open 游标名称
  • 对查询的结果集(游标)进行检索行至变量提供使用
  • 关闭游标: close 游标名称

2. 举例

create procedure 存储过程名称()
begin
– 游标 –
– xx名称,打开游标后抓取每行,将结果赋值给name
declare name varchar(20);
– 创建游标
declare 游标名称 cursor for 查询语句;
– 打开游标
open 游标名称;
– 对查询的结果集(即游标)进行检索行至变量提供使用
fetch 游标名称 into name;
select name;
– 关闭游标
close 游标名称;
end;
– 调用存储过程
call 存储过程名称;
–删除存储过程
drop procedure 存储过程名称;

3. 使用游标

1. 简单的使用游标

需求:查询oid为1的订单明细名称的结果集作为游标

  • 打开游标后抓取每行将结果赋值给变量name
CREATE PROCEDURE printName()
BEGIN-- 订单名称DECLARE name VARCHAR(20);-- 创建游标DECLARE cur CURSOR FOR SELECT detail_name FROM order_detail WHERE oid = '1';-- 打开游标OPEN cur;FETCH cur INTO name;SELECT name;-- 关闭游标CLOSE cur;
END;
  • 调用存储过程
CALL printName;
  • 打印结果只有一条数据,说明上述方式只在游标中抓取到一条数据,而且是表里面行号最小的行:
    在这里插入图片描述

2. 在循环中使用游标

  • 将 查询oid为1 的结果集赋值给游标,通过游标抓取每行将订单明细名称和价格分别赋值给变量namedetail_price,在循环无法继续时会出现SQLSTATE '02000',即此通过变量continue时设置done为1代表true,此时循环结束,跳出循环:
DROP PROCEDURE IF EXISTS printDetail;
CREATE PROCEDURE printDetail()
BEGIN-- 订单名称DECLARE name varchar(20);-- 价格DECLARE detail_price DECIMAL(8,2);-- 结束标志变量(默认为假)DECLARE done boolean DEFAULT 0;-- 创建游标DECLARE cur CURSOR FOR SELECT detail_name, price FROM order_detail WHERE oid='1';-- 指定游标循环结束时的返回值DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;-- 打开游标OPEN cur;-- 循环游标数据detail_loop:LOOP-- 根据游标当前指向的一条数据FETCH cur INTO name, detail_price;SELECT name, detail_price;-- 判断游标的循环是否结束IF done THEN-- 跳出游标循环LEAVE detail_loop;END IF;END LOOP;-- 关闭游标CLOSE cur;
END;
  • 调用存储过程:
CALL printDetail();	
  • 查询结果:(不足是会多遍历最后一行,如果要精细处理还是需要自定义标志位进行跳出循环)
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值