mysql存储过程表迁移for_MySQL存储过程--通过游标遍历和异常处理迁移数据到历史表 (转)...
--?大表數(shù)據(jù)遷移,每天凌晨1點到5點執(zhí)行,執(zhí)行間隔時間10分鐘,遷移舊數(shù)據(jù)到歷史表。
DELIMITER $$
USE `dbx`$$
DROP PROCEDURE IF EXISTS `pro_xx`$$
CREATE??PROCEDURE `pro_xx`()
BEGIN
DECLARE p_oalid INT DEFAULT 0;
DECLARE STOP INT DEFAULT 0;
DECLARE cur_oalid CURSOR FOR
SELECToal.id FROM oal_xxx oal WHERE oal.`ymd`
DECLARE EXIT HANDLER FOR SQLSTATE '02000'? /**包含游標not found*/
BEGIN
SET STOP=1;
INSERTINTO db_logs(log_type,table_name,action_name,log_msg,create_time)
SELECT1, 'oal_xxx','pro_oal_log_move',CONCAT('primary key:',p_oalid,' 游標執(zhí)行正常結(jié)束!'),NOW();
END;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SETSTOP=1;
INSERTINTO db_logs(log_type,table_name,action_name,log_msg,create_time)
SELECT2, 'oal_xxx','pro_oal_log_move',CONCAT('primary key:',p_oalid,' 移動執(zhí)行失敗'),NOW();
END;
OPEN cur_oalid;
-- 讀取一行數(shù)據(jù)到變量
FETCH cur_oalid INTO p_oalid;
-- 這個就是判斷是否游標已經(jīng)到達了最后
WHILE STOP <> 1 DO
-- select p_id;
START TRANSACTION;
-- ??進行數(shù)據(jù)遷移
REPLACE INTO oal_xxx_history SELECT oal.*FROM oal_xxx oal WHERE oal.id=p_oalid ;
DELETE FROM oal_xxx WHERE id=p_oalid;
-- INSERT INTO t (tid) VALUES (p_tid);
COMMIT;
-- 讀取下一行的數(shù)據(jù)
FETCH cur_oalid INTO p_oalid;
END WHILE;
CLOSE cur_oalid; -- 關(guān)閉游標
END$$
DELIMITER ;
總結(jié)
以上是生活随笔為你收集整理的mysql存储过程表迁移for_MySQL存储过程--通过游标遍历和异常处理迁移数据到历史表 (转)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全国计算机二级c 笔记,[IT认证]全国
- 下一篇: 层遇到select框时[收藏]