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
-- 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)),'-',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;
-- 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) !