• 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 ;

  • 相关阅读:
    函数对象、名称空间与作用域
    函数
    leetcode语法练习(二)
    leetcode语法练习(一)
    字符编码与文件操作
    集合类型内置方法与总结
    列表,元组与字典类型
    数据类型内置方法之数据类型与字符串类型
    [SVG实战]饼图全面解析
    [JavaScript语法学习]重新认识JavaScript
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/8053760.html
Copyright © 2020-2023  润新知