您的位置:首页 > 数据库 > MySQL

MySql 触发器 循环遍历

2017-09-20 17:17 113 查看
由于在做项目的时候遇到了,需要能遍历表的触发器,但是对语法不是很熟悉,今天就在这个做个笔记,也一起研究研究,大家有什么问题都可以提,我能jie。下面是完整示例代码,并加了注释:

1.使用游标的方法遍历—repeat until

DROP TRIGGER `saa`;
CREATE TRIGGER `saa` AFTER INSERT ON `user`
FOR EACH ROW begin
declare user varchar(255); /*定义属性*/
declare  pwd varchar(255);

declare Done int DEFAULT 0;/*判断循环是否关闭的标志位*/
declare prd_code VARCHAR(255);
/*定义游标 以及赋值 如果多个值就注意下游标取值*/
declare result cursor for select id from user;
/*定义异常处理 */
declare continue handler for not found set Done =1;
/*打开游标*/
open  result ;
/*提取游标的值  多个值的时候: fetch xxx into xxx,xxx */
fetch  result into prd_code;
/*循环开始*/
repeat
/*TODO 根据用户id获取信息,存保存到另一张表*/
select login_name,login_password into user,pwd  from user where id=prd_code;
insert into online(user,name) values(user,pwd);
fetch result into prd_code;
until Done = 1  end repeat ;/*关闭循环*/
close result ;/*关闭游标*/
end;


2.使用游标的方法遍历—loop

begin
declare user varchar(255); /*定义属性*/
declare  pwd varchar(255);

declare Done int DEFAULT 0;/*判断循环是否关闭的标志位*/
declare prd_code VARCHAR(255);
declare prd_usr VARCHAR(255);
/*定义游标 以及赋值*/
declare result cursor for select id,login_name from user;
/*定义异常处理 */
declare continue handler for not found set Done =1;
/*打开游标*/
open  result ;

/*循环开始*/
flag_loop:loop
/*提前游标的值  多个值的时候: fetch xxx into xxx,xxx */
fetch  result into prd_code,prd_usr ;
/*声明结束的时候*/
if Done then leave flag_loop ; end if ;
/*TODO 根据用户id获取信息,存保存到另一张表*/
select login_name,login_password into user,pwd  from user where id=prd_code;
insert into online(user,name) values(user,pwd);
end loop flag_loop;  /*循环结束*/
close result ;/*关闭游标*/
end


3.使用游标的方法遍历—while do

语法:[label:]while 条件 do /TODO/ end while [label]

begin
declare user varchar(255); /*定义属性*/
declare  pwd varchar(255);

declare Done int DEFAULT 0;/*判断循环是否关闭的标志位*/
declare prd_code VARCHAR(255);
declare prd_usr VARCHAR(255);
/*定义游标 以及赋值*/
declare result cursor for select id,login_name from user;
/*定义异常处理 */
declare continue handler for not found set Done =1;
/*打开游标*/
open  result ;

/*循环开始*/
flag_while:while Done=0 do
/*提前游标的值  多个值的时候: fetch xxx into xxx,xxx */
fetch  result into prd_code,prd_usr ;
/*声明结束的时候*/
if Done=1 then leave flag_while ; end if ;
/*TODO 根据用户id获取信息,存保存到另一张表*/
sele
4000
ct login_name,login_password into user,pwd  from user where id=prd_code;
insert into online(user,name) values(user,pwd);
end while flag_while;  /*循环结束*/
close result ;/*关闭游标*/
end


总结

其实 loop 跟while 的用法都差不多,repeat 的就小心点了,游标循环取值会有点麻烦。。。祝大家学习愉快!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 遍历