• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySQL存储过程-->通过游标遍历和异常处理迁移数据到历史表

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

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了MySQL存储过程,游标遍历,迁移数据等相关知识,希望本文的分享对您有所帮助
-- 大表数据迁移,每天凌晨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_oalid;
      END WHILE;         
   CLOSE cur_oalid; -- 关闭游标  
 END$$
 
DELIMITER ;

以上就是MySQL存储过程-->通过游标遍历和异常处理迁移数据到历史表 的内容,更多相关内容请关注微课江湖()!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • mysql 精简过程(删除一些文件)
  • mysql存储过程 在动态SQL内获取返回值的方法详解
  • 深入mysql存储过程中表名使用参数传入的详解
  • 基于mysql多实例安装的深入解析
  • 深入mysql创建自定义函数与存储过程的详解
  • 基于Php mysql存储过程的详解
  • Mysql DNS反向解析导致连接超时过程分析(skip-name-resolve)
  • 一次非法关机导致mysql数据表损坏的实例解决
  • Mysql的游标的定义使用及关闭深入分析
  • mysql存储过程 游标 循环使用介绍

相关文章

  • 2018-12-05java.sql.SQLException: 内部错误: Unable to construct a Datum
  • 2018-12-05mssql 数据库表行转列,列转行终极方案
  • 2018-12-05mysql 主键与索引的联系与区别
  • 2018-12-05全面了解mysql中utf8和utf8mb4的区别_MySQL
  • 2018-12-05mssql查找备注(text,ntext)类型字段为空的方法
  • 2018-12-05如何实现windows服务器下mysql自动定时备份数据库
  • 2018-12-05Oracle Connect to Idle Instance解决方法
  • 2018-12-05重命名SQLServer数据库的方法
  • 2017-05-11mysql 复制记录实现代码
  • 2018-12-05MySQL数据库报错:Too many connections的解决办法

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL数据库InnoDB数据恢复工具的使用小结详解
    • mysql列转行以及年月分组的示例代码分享
    • 在Oracle 8x实现自动断开后再连接
    • ACCESS数据库文件的压缩和修复方法
    • MYSQL 修改root密码命令小结
    • 关于mysql_num_rows()函数的文章汇总
    • MSSQL 游标使用 心得
    • mysql中向表中某字段追加字符串的方法
    • mysql中explain用法详解
    • 详解mysql基于正则实现模糊替换字符串的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有