mysql儲存過程批量更新
阿新 • • 發佈:2018-11-26
mysql儲存過程批量更新
以下sql單獨執行沒問題,但是在儲存過程中執行2次就會報錯
update tbl_a a ,tbl_b b set a.name =b.name where a.id=b.id
在儲存過程中,取代的方案是使用遊標迴圈更新
drop procedure IF EXISTS test_proc;
delimiter //
create procedure test_proc()
begin
-- 宣告一個標誌done, 用來判斷遊標是否遍歷完成
DECLARE done INT DEFAULT 0;
-- 宣告一個變數,用來存放從遊標中提取的資料
-- 特別注意這裡的名字不能與由遊標中使用的列明相同,否則得到的資料都是NULL
DECLARE tname varchar(50) DEFAULT NULL;
DECLARE tpass varchar(50) DEFAULT NULL;
-- 宣告遊標對應的 SQL 語句
DECLARE cur CURSOR FOR
select name, password from netingcn_proc_test;
-- 在遊標迴圈到最後會將 done 設定為 1
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- 執行查詢
open cur;
-- 遍歷遊標每一行
REPEAT
-- 把一行的資訊存放在對應的變數中
FETCH cur INTO tname, tpass;
if not done then
-- 這裡就可以使用 tname, tpass 對應的資訊了
select tname, tpass;
end if;
UNTIL done END REPEAT;
CLOSE cur;
end
//
delimiter ;
-- 執行儲存過程
call test_proc();
在遊標中迴圈更新每條資料