运用存储过程,把用户表一数据导入用户表二
DELIMITER @@
CREATE PROCEDURE imp_to_user2()
BEGIN
– 声明一个标志done, 用来判断游标是否遍历完成
DECLARE done INT DEFAULT FALSE;
– 声明一个变量,用来存放从游标中提取的数据
– 特别注意这里的名字不能与由游标中使用的列明相同,否则得到的数据都是NULL
DECLARE lname VARCHAR(20) DEFAULT NULL;
DECLARE lage INT(5) DEFAULT 0;
– 声明游标对应的 SQL 语句
DECLARE cur CURSOR FOR SELECT NAME,age FROM t_user;
– 在游标循环到最后会将 done 设置为 TRUE
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
– 执行查询
OPEN cur;
– 遍历游标每一行
read_loop: LOOP
– 提取游标里的数据
FETCH cur INTO lname,lage ;
– 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
--定义全局变量@num记录 要同步到的表是否已有该名字
SELECT COUNT(*) INTO @num FROM t_user2 u WHERE u.name=lname;
--如果该名字不存在,则同步
IF @num=0 THEN
INSERT INTO t_user2(id,NAME, age) VALUES( NULL,lname,lage);
END IF;
END LOOP;
– 关闭游标
CLOSE cur;
END
@@
DELIMITER ;