zoukankan      html  css  js  c++  java
  • 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 ;

  • 相关阅读:
    顺序容器的操作
    C++顺序容器
    Java8实战系列一
    Java枚举的小知识点
    Java集合框架入门介绍(一)
    测试代码格式
    Eclipse通过jdbc连接sqlserver2008数据库的两种方式
    排序算法之插入排序
    排序算法之冒泡排序
    容器扩容之分摊时间复杂度分析
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/5749689.html
Copyright © 2011-2022 走看看