MySql 触发器 循环遍历

来源:互联网 发布:linux开源社区 编辑:程序博客网 时间:2024/06/06 07:51

由于在做项目的时候遇到了,需要能遍历表的触发器,但是对语法不是很熟悉,今天就在这个做个笔记,也一起研究研究,大家有什么问题都可以提,我能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获取信息,存保存到另一张表*/    select 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 的就小心点了,游标循环取值会有点麻烦。。。祝大家学习愉快!

原创粉丝点击