MySQL存儲過程複製表數據到另一表中

1、源表信息:
CREATE TABLE `aa` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `b1` int(11) DEFAULT NULL,
  `abc` int(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `b` (`b1`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
2、目標表
CREATE TABLE `test` (
  `auto_id` int(11) NOT NULL AUTO_INCREMENT,
  `a1` int(10) NOT NULL,
  `a2` int(11) DEFAULT NULL,
  `a3` int(11) DEFAULT NULL,
  PRIMARY KEY (`auto_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='測試表'
3、存儲過實現:注意格式
DELIMITER $$
DROP PROCEDURE IF EXISTS `record_timestamp_deal`$$
#創建存儲過程
CREATE PROCEDURE record_timestamp_deal()
BEGIN
#定義獲取值存儲的變量
DECLARE a4 INT;
DECLARE a5 INT;
DECLARE a6 INT;
DECLARE is_done INT DEFAULT 0;
DECLARE cur CURSOR FOR SELECT id,b1,abc FROM aa;
#異常處理
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET is_done =1;
OPEN cur;
#取出遊標值至定義的變量中
    FETCH NEXT FROM cur INTO a4,a5,a6;
REPEAT
    IF NOT is_done THEN 
            INSERT INTO test(a1,a2,a3)VALUES(a4,a5,a6);       
    END IF ;
#重新抓取數據進入循環
    FETCH NEXT FROM cur INTO a4,a5,a6;
#結束循環

UNTIL is_done END REPEAT ;


#關閉遊標

CLOSE cur ;

END $$


##調用存儲過程

call record_timestamp_deal

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章