- 游标
是被select语句检索出来的结果集,能从包括多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。 - 使用游标
1、声明游标
2、打开游标以供使用
3、根据需要取出检索出的各条记录
4、关闭游标 - 创建游标
- 打开关闭游标
- 使用游标数据
定义游标变量:declare 游标变量名 cursor for select查询语句
读取游标值:fetch 游标名 into 变量
repeat …until 循环结束条件 end repeat 循环读取
declare continue handler for 定义句柄作为循环的条件
delimiter //
--1因为要声明存储过程,所以先将语句分隔符(分号;)改为其他符号//
create procedure precssorders()
--2创建一个存储过程,create procedure
begin
--3开始存储过程
declare done boolean default 0;
--9声明一个布尔型变量,来标志循环读取是否读完,缺省时值为0(注意:定义的局部变量需要游标前定义)
declare t decimal(10,2);
--11声明一个变量,将来存储计算出来的订单金额
declare o int;
--6声明变量,读取游标的记录order_num
declare ordernumbers cursor for select order_num from orders;
--4定义游标,使用declare 游标名 cursor for
declare continue handler for sqlstate '02000' set done=1;
--10声明一个continue处理程序,(注意:定义的句柄须在定义游标之后定义)
create table if not exists ordertotals(order_num int,total decimal(10,2));
--12创建表ordertotals,两个参数order_num,,total
open ordernumbers;
--5打开游标
repeat
--8循环读取,读取游标中每一行
fetch ordernumbers into o;
--7读取游标ordernumbers中的一行 赋值给o变量
call ordertotal(o,1,t)
--13调用其他存储过程,执行完存储过程后,t会作为返回值存储total总金额
insert into ordertotals values(o,t)
--14 把结果存储到刚才创建的ordertotals表中
until done end repeat;
--8结束循环,直到done为0时结束循环
close ordernumbers;
--5关闭游标
select * from ordertotals;
--15可以查看一下新建的表ordertotals
end;
--3结束存储过程
call precssorders
--调用执行precssorders存储过程