数据库学习笔记——使用游标

  • 游标
    是被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存储过程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值