MySQL游标

MySQL游标

While循环

-- MySQL游标只能用于存储过程和函数
-- 使用过程 声明、打开游标、使用游标、关闭游标
-- 如果未明确关闭游标,END时会自动关闭
-- https://dev.mysql.com/doc/refman/8.0/en/error-handling.html
drop PROCEDURE if exists process_user;
create procedure process_user()
begin
	-- Declare local variables
	declare done boolean default true;
	declare user_id int;
	declare user_info varchar(50);
	
	-- Declare the cursor
	declare cursor_user cursor for select id, user_name from sys_user;
	
	-- Declare continue handler
	declare continue handler for sqlstate '02000' set done=false;
	
	-- Create a table to store the results;
	create table if not exists process_user_result(user_id int, user_name varchar(50));
	
	-- Open the cursor
	open cursor_user;
	
	-- Repeat through all rows
	repeat
		fetch cursor_user into user_id, user_info;
		if done then 
			insert into process_user_result(user_id, user_name) 
			values(user_id, user_info);
		end if;
	until (not done) end repeat;
	
	-- Close the cursor
	close cursor_user;
end;

call process_user();

Repeat循环

drop PROCEDURE if exists process_user;
create procedure process_user()
begin
	-- Declare local variables
	declare done boolean default true;
	declare user_id int;
	declare user_info varchar(50);
	
	-- Declare the cursor
	declare cursor_user cursor for select id, user_name from sys_user;
	
	-- Declare continue handler
	declare continue handler for not found set done=false;
	
	-- Create a table to store the results;
	create table if not exists process_user_result(user_id int, user_name varchar(50));
	
	-- Open the cursor
	open cursor_user;
	
	-- Loop through all rows
	fetch cursor_user into user_id, user_info;
	while done do
		insert into process_user_result(user_id, user_name) 
		values(user_id, user_info); 
		fetch cursor_user into user_id, user_info;
	end while;
	
	-- Close the cursor
	close cursor_user;
end;

call process_user();

Loop循环

drop PROCEDURE if exists process_user;
create procedure process_user()
begin
	-- Declare local variables
	declare done boolean default true;
	declare user_id int;
	declare user_info varchar(50);
	
	-- Declare the cursor
	declare cursor_user cursor for select id, user_name from sys_user;
	
	-- Declare continue handler
	declare continue handler for not found set done=false;
	
	-- Create a table to store the results;
	create table if not exists process_user_result(user_id int, user_name varchar(50));
	
	-- Open the cursor
	open cursor_user;
	
	-- Loop through all rows
	read_loop:loop
		fetch cursor_user into user_id, user_info;
		if not done then
			leave read_loop;
		end if;
		insert into process_user_result(user_id, user_name) values(user_id, user_info);
	end loop;
	
	-- Close the cursor
	close cursor_user;
end;

call process_user();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值