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 ;

  • 相关阅读:
    编译用到boost相关的东西,问题的解决;以及和googletest库
    看开源代码利器—用Graphviz + CodeViz生成C/C++函数调用图(call graph)
    centos5 升级到centos6
    Go vs Erlang
    Graphviz
    Oracle相关安装经验总结
    学习erlang书籍
    sublime使用总结
    List集合五种遍历方式
    nginx常用命令
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/8053760.html
Copyright © 2011-2022 走看看