>  기사  >  데이터 베이스  >  MySQL 저장 프로시저-->커서 탐색 및 예외 처리를 통해 데이터를 기록 테이블로 마이그레이션

커서 탐색 및 예외 처리를 통해 데이터를 기록 테이블로 마이그레이션

-->

MySQL 저장 프로시저-->커서 탐색 및 예외 처리를 통해 데이터를 기록 테이블로 마이그레이션

黄舟
黄舟원래의
2017-02-17 11:34:221397검색

-- 대형 테이블 데이터 마이그레이션,매일 아침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)),&#39;-&#39;,MONTH(DATE_ADD(NOW(),INTERVAL -1 MONTH )),&#39;-&#39;,
         DAY(DATE_ADD(NOW(),INTERVAL-1 MONTH ))) LIMIT 1000;  
   DECLARE EXIT HANDLER FOR SQLSTATE &#39;02000&#39;  /**包含游标not found*/
   BEGIN
        SET STOP=1;
         INSERTINTO db_logs(log_type,table_name,action_name,log_msg,create_time)
         SELECT1, &#39;oal_xxx&#39;,&#39;pro_oal_log_move&#39;,CONCAT(&#39;primary key:&#39;,p_oalid,&#39; 游标执行正常结束!&#39;),NOW();       
   END;
       
   DECLARE EXIT HANDLER FOR SQLEXCEPTION
   BEGIN
         SETSTOP=1;
         INSERTINTO db_logs(log_type,table_name,action_name,log_msg,create_time)
         SELECT2, &#39;oal_xxx&#39;,&#39;pro_oal_log_move&#39;,CONCAT(&#39;primary key:&#39;,p_oalid,&#39; 移动执行失败&#39;),NOW();
   END; 
   
   OPEN cur_oalid;

 

-- 변수에 데이터 한 줄 읽어오기

FETCH cur_oalid INTO p_oalid;

-- 커서가 끝에 도달했는지 확인하는 것입니다.

 WHILE STOP <> 1 DO 
         -- select p_id;
         START TRANSACTION;

-- 데이터 마이그레이션 수행

안됨

                                                              위 MySQL 저장 프로시저 --> 데이터 마이그레이션의 내용입니다. 커서 탐색 및 예외 처리를 통해 히스토리 테이블에 추가 관련 내용을 보려면 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.