MySql 觸發器 迴圈遍歷
阿新 • • 發佈:2019-01-10
由於在做專案的時候遇到了,需要能遍歷表的觸發器,但是對語法不是很熟悉,今天就在這個做個筆記,也一起研究研究,大家有什麼問題都可以提,我能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 的就小心點了,遊標迴圈取值會有點麻煩。。。祝大家學習愉快!