MYSQL 使用儲存過程批量更新表資料
阿新 • • 發佈:2019-02-11
DELIMITER //
CREATE PROCEDURE `update_user`()
BEGIN
DECLARE userId BIGINT;
DECLARE openId VARCHAR(40);
declare stop int default 0;
DECLARE cur CURSOR FOR (SELECT open_id,uid FROM user_map);
/*
定義遊標的結束,當遍歷完成時,將stop設定為null
這裡也可以寫成 DECLARE CONTINUE HANDLER FOR NOT FOUND SET stop = null;
*/
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop = null;
/*開遊標*/
OPEN cur;
/*遊標向下走一步,將查詢出來的兩個值付給定義的兩個變數*/
FETCH cur INTO openId,userId;
/* 迴圈體 */
WHILE ( stop is not null) DO
/*更新資料表*/
update user_info set open_id=openId where uid = userId ;
/*遊標向下走一步*/
FETCH cur INTO openId,userId;
END WHILE;
/*關閉遊標*/
CLOSE cur;
END;
//
DELIMITER ;
CREATE PROCEDURE `update_user`()
BEGIN
DECLARE userId BIGINT;
DECLARE openId VARCHAR(40);
declare stop int default 0;
DECLARE cur CURSOR FOR (SELECT open_id,uid FROM user_map);
/*
定義遊標的結束,當遍歷完成時,將stop設定為null
這裡也可以寫成 DECLARE CONTINUE HANDLER FOR NOT FOUND SET stop = null;
*/
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop = null;
/*開遊標*/
OPEN cur;
/*遊標向下走一步,將查詢出來的兩個值付給定義的兩個變數*/
FETCH cur INTO openId,userId;
/* 迴圈體 */
WHILE ( stop is not null) DO
/*更新資料表*/
update user_info set open_id=openId where uid = userId ;
/*遊標向下走一步*/
FETCH cur INTO openId,userId;
END WHILE;
/*關閉遊標*/
CLOSE cur;
END;
//
DELIMITER ;