遇到一个问题: 在存储过程中使用MySQL的游标时,最后一行遍历了两次。存储过程的代码示例如下:
delimiter //
drop procedure if exists processorders;
create procedure processorders()
begin
-- 声明一个boolean变量
declare done boolean default 0;
-- 声明一个变量
declare o int;
declare t decimal(8,2);
-- 定义游标
declare ordernumbers cursor for select order_num from orders;
-- 定义一个continue handler
declare continue handler for SQLSTATE '02000' set done=1;
-- 创建一个表,用于存放查询结果
drop table if exists ordertotals;
create table if not exists ordertotals (order_num int, total decimal(8,2));
-- 打开游标
open ordernumbers;
-- 使用游标,在游标中取出第一行
-- fetch ordernumbers into o;
-- 遍历游标
repeat
-- 从由表中按顺序取值
fetch ordernumbers into o;
-- 调用之前的存储过程
call ordertotal(o,1, t);
-- 将结果插入到表中
-- select o;
insert into ordertotals(order_num, total) values(o, t);
-- 结束遍历
until done end