欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

mysql存储过程->通过游标遍历和错误处理迁移数据到历史表

更新时间: 2014-01-05 02:09:30 责任编辑: Author_N1

 

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 ;

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:09:30
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6340/
本文WWW.DOC100.NET DOC100.NET版权所有。