有2个表:t1,t2
t1:
id | msg |
2 | aaaa |
3 | bbbb |
建一个存储过程,写个游标把数据拷贝过去:
DELIMITER $$
USE `aporroreport`$$
DROP PROCEDURE IF EXISTS `test_copy_p1`$$
CREATE PROCEDURE `test_copy_p1`()
BEGIN
#-- 需要定义接收游标数据的变量
DECLARE msg VARCHAR(200);
DECLARE id INT;
#-- 游标
#-- 遍历数据结束标志
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT msg FROM t1;
#-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
#-- 打开游标
OPEN cur;
#-- 开始循环
read_loop:LOOP
#-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur INTO msg;
#-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
#--拷贝到t2
INSERT INTO t2(msg) VALUES (msg);
END LOOP;
#-- 关闭游标
CLOSE cur;
END$$
DELIMITER ;
CALL test_copy_p1
结果,t2是这样的:
id | msg |
23 | (NULL) |
24 | (NULL) |
原来查询的时候要加别名:
DELIMITER $$
USE `aporroreport`$$
DROP PROCEDURE IF EXISTS `test_copy_p1`$$
CREATE PROCEDURE `test_copy_p1`()
BEGIN
#-- 需要定义接收游标数据的变量
DECLARE msg VARCHAR(200);
DECLARE id INT;
#-- 游标
#-- 遍历数据结束标志
DECLARE done INT DEFAULT FALSE;
#查询的时候要加别名,否则查不到数据
DECLARE cur CURSOR FOR SELECT t.msg FROM t1 AS t ;
#-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
#-- 打开游标
OPEN cur;
#-- 开始循环
read_loop:LOOP
#-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur INTO msg;
#-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
#--拷贝到t2
INSERT INTO t2(msg) VALUES (msg);
END LOOP;
#-- 关闭游标
CLOSE cur;
END$$
DELIMITER ;
这下就ok了
为什么这么坑爹
id | msg |
2 | aaaa |
3 | bbbb |