MySQL 游标

    xiaoxiao2021-03-25  89

    声明游标

    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 ;

    转载请注明原文地址: https://ju.6miu.com/read-22017.html

    最新回复(0)