• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL存储过程–>通过游标遍历和异常处理迁移数据到历史表

mysql 搞代码 4年前 (2022-01-09) 21次浏览 已收录 0个评论

大表数据迁移,每天凌晨1点到5点执行,执行间隔时间10分钟,迁移旧数据到历史表。

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` <CONCAT(YEAR(DATE_ADD(NOW(),INTERVAL -1 MONTH)),'-',MONTH(DATE_ADD(NOW(),INTERVAL -1 MONTH )),'-',         DAY(DATE_ADD(NOW(),INTERVAL-1 MONTH ))) LIMIT 1000;     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,' 游标执行正常结束!'),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,' 移动执行失败'),NOW();   END;       OPEN cur_oalid;

读取一行数据到变量

FETCH cur_oalid INTO p_oalid;

这个就是判断是否游标已经到达了最后

 WHILE STOP <> 1 DO          -- select p_id;         START TRANSACTION;

进行数据迁移

   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;

读取下一行的数据

 FETCH cur_oalid INTO p<em style="color:transparent">本文来源[email protected]搞@^&代*@码)网9</em>_oalid;      END WHILE;            CLOSE cur_oalid; -- 关闭游标   END$$ DELIMITER ;

以上就是MySQL存储过程–>通过游标遍历和异常处理迁移数据到历史表 的内容,更多相关内容请关注搞代码(www.gaodaima.com)!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL存储过程–>通过游标遍历和异常处理迁移数据到历史表
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址