MySQL 游标

声明游标

declare CURSOR_NAME curosr for SELECT_STATEMENT;

打开游标

open CURSOR_NAME;

关闭游标

close CURSOR_NAME;

从游标中取数据

fetch CURSOR_NAME into var1, var2, ...;

示例1:

delimiter //
drop procedure if exists p//
create procedure p()
begin
	declare id int;
	declare name varchar(20);
	declare pass varchar(20);
	
	#声明游标
	declare cur_user cursor for select * from user;
	
	#打开游标
	open cur_user;
	
	#取数据
	fetch cur_user into id,name,pass;
	select id,name,pass;
	
	fetch cur_user into id,name,pass;
	select id,name,pass;
	
	fetch cur_user into id,name,pass;
	select id,name,pass;
	  
	#关闭游标
	close cur_user;
end//
delimiter ;


示例2:

delimiter //
drop procedure if exists p2//
create procedure p2()
begin
	declare id int;
	declare name varchar(20);
	declare pass varchar(20);

	# 记录总数
	declare num int;
	declare i int default 0;
	
	#声明游标
	declare cur_user cursor for select * from user;
	
	# 查询记录总数
	select count(*) into num from user;
	set i := 1;

	#打开游标
	open cur_user;
	
	#取数据
	repeat
		fetch cur_user into id,name,pass;
		select id,name,pass;
		set i := i + 1;
	until i>num end repeat;
	
	#关闭游标
	close cur_user;
end//
delimiter ;

示例3:

delimiter //
drop procedure if exists p3//
create procedure p3()
begin
	declare id int;
	declare name varchar(20);
	declare pass varchar(20);
	
	# has=1 表示还有数据
	declare has int default 1;
	
	#声明游标
	declare cur_user cursor for select * from user;

	# continue handler 触发后后面的语句急促执行
	# exit handler 触发后后面的语句不再执行
	# undo handler 触发后前面的语句撤销, 但是 MySQL 不支持

	#声明 continue handler
	declare continue handler for NOT FOUND set has := 0;

	#打开游标
	open cur_user;

	#取数据
	repeat
		fetch cur_user into id,name,pass;
		select id,name,pass;
	until has=0 end repeat;

	#关闭游标
	close cur_user;
end//
delimiter ;

示例4:

delimiter //
drop procedure if exists p4//
create procedure p4()
begin
	declare id int;
	declare name varchar(20);
	declare pass varchar(20);
	
	# has=1 表示还有数据
	declare has int default 1;
	
	#声明游标
	declare cur_user cursor for select * from user;

	#声明 continue handler
	declare continue handler for NOT FOUND set has := 0;

	#打开游标
	open cur_user;

	fetch cur_user into id,name,pass;
	while has=1 do
		select id,name,pass;
		fetch cur_user into id,name,pass;
	end while;

	#关闭游标
	close cur_user;
end//
delimiter ;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值