MySQL-游标

使用游标,可以遍历返回的多行结果,只适用于存储过程以及函数。游标每一次fetch都是获取一行结果,可以使用变量来获取fetch到的每一列的值。

语法

  1. 定义游标:declare 游标名 cursor for select语句;
  2. 打开游标:open 游标名;
  3. 获取结果:fetch 游标名 into 变量名[,变量名];
  4. 关闭游标:close 游标名;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
create procedure p()
BEGIN
declare mcId int;
declare flag int default 0;
-- 声明游标
declare mc cursor for SELECT id FROM `orders` WHERE STATUS = -1 AND NOW() >= (orders.startDate + INTERVAL days day);
declare continue handler for not found set flag = 1;
-- 打开游标
open mc;
-- 循环
lp:loop

-- 获取结果
fetch mc into mcId;
if flag=1 then -- 当无法fetch会触发handler continue
leave lp;
end if;
-- 这里是为了显示获取结果
CALL set_orderStatus(mcId, '0');
-- 结束循环
end loop;
-- 关闭游标
close mc;
END

call p();

参考文章

mysql之游标