天天看點

Mysql 腳本循環更新資料

-- 使用資料庫
use database;
-- 删除舊的存儲過程(相當于函數)
DROP PROCEDURE if EXISTS `generatePoint`;
-- 定義結束語句
DELIMITER $$
-- 定義新的存儲過程
create PROCEDURE `generatePoint`()

BEGIN
	-- 定義結束标志
	DECLARE flag int default 0;
	DECLARE pid int; /* 每條記錄的臨時id */
	-- 擷取循環範圍
	DECLARE idList CURSOR for(select id from world_county);
	-- 當idList循環完畢,設定結束标志flag為1
	DECLARE continue handler for not found set flag = 1;
	-- 開始循環idList
	open idList;
		REPEAT
		-- 拉取idList的值到pid
		fetch idList into pid;
		if not flag then
			-- 更新資料
			update world_county set location = pointfromtext(CONCAT('POINT(',lon,' ',lat,')')) where id = pid;
		end if;
		-- 結束循環
		UNTIL flag END REPEAT;
	close idList;
end $$
	
DELIMITER ;

-- 執行函數
CALL generatePoint();
-- 删除函數
DROP PROCEDURE generatePoint;