Maison  >  Article  >  base de données  >  Procédure stockée MySQL -> Migrer les données vers la table d'historique via la traversée du curseur et la gestion des exceptions

Procédure stockée MySQL -> Migrer les données vers la table d'historique via la traversée du curseur et la gestion des exceptions

黄舟
黄舟original
2017-02-17 11:34:221390parcourir

-- Migration des données de grandes tables,Tous les matins1Cliquez 5Cliquez pour exécuter , l'intervalle d'exécution est de 10 minutes, migrez les anciennes données vers la table d'historique.

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;

 

-- Lire une ligne de données dans la variable

FETCH cur_oalid INTO p_oalid;

-- Cela permet de déterminer si le curseur a atteint la fin

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

                                                                              🎜>Lire Obtenir les données de la ligne suivante >

   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;
Ce qui précède est le contenu de la procédure stockée MySQL --> migration des données vers la table d'historique via le parcours du curseur et la gestion des exceptions, plus de contenu connexe Veuillez faire attention au site Web PHP chinois (www.php.cn) !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn