mysql存储过程使用游标

本文介绍了MySQL存储过程中游标的使用,包括游标的作用,如遍历查询结果集,并详细阐述了声明、打开、获取数据和关闭游标的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、游标的作用及属性

游标的作用就是用于对查询数据库所返回的数据集进行遍历,以便进行相应的操作;游标有下面这些属性:

a、游标是只读的,也就是不能更新它;

b、游标是不能滚动的,也就是只能在一个方向上进行遍历,不能在记录之间随意进退,不能跳过某些记录;

c、避免在已经打开游标的表上更新数据。
d、mysql游标特性只用于存储过程。

2、如何使用游标

使用游标需要遵循下面步骤:
a、首先用DECLARE语句声明一个游标

    DECLARE cursor_name CURSOR FOR SELECT_statement;  

上面这条语句就为我们执行的select语句返回的数据集指定了一个游标 。

b、其次需要使用OPEN语句来打开上面你定

 OPEN cursor_name;    

c、接下来你可以用FETCH语句来获得下一行数据,并且游标也将移动到对应的记录上(这个就类似java里面的那个iterator。
FETCH cursor_name INTO variable list;

d、然后最后当我们所需要进行的操作都结束后我们要把游标释放掉。

CLOSE cursor_name;  
这是在navicat中以mysql的存储过程例程,包含一个游标,调用存储过程。
CREATE DEFINER = `root`@`localhost` PROCEDURE `NewProc`()
BEGIN
    #Routine body goes here...
DECLARE done boolean DEFAULT 0;
DECLARE no_more_data boolean DEFAULT 0;
DECLARE o int;
DECLARE t DECIMAL(8,2); -- 对每个订单税后总价
-- 定义一个游标
DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders ORDER BY order_num DESC;
-- 定义循环结束条件
-- 条件一:当sqlstate为02000时候退出
DECLARE CONTINUE HANDLER FOR SQLSTATE  '02000'  SET done=1;
-- 条件二:当没找到数据时候,但是实验说明这个条件有问题。
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_data=1;
-- 创建一个表用于保存结果集,如果没有就创建
CREATE TABLE IF NOT EXISTS ordertotals(
order_num INT ,total DECIMAL(8,2)
);
-- 开启游标
OPEN ordernumbers;
-- 遍历所找到的结果集中的所有元素
REPEAT
FETCH ordernumbers INTO o;
SELECT o; -- 输出结果
CALL computeTax(o,t,1); -- 计算税后总价
-- 插入一条记录
INSERT INTO ordertotals(order_num, total)
VALUES(o,t);
UNTIL done   -- 结束循环条件
END REPEAT;
-- 关闭游标
CLOSE ordernumbers;
END;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值