-- 使用資料庫
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;