mysql游标loop遍历插入数据sql
记录一个需求
数据库中有两张表,一张 sys_company,一张 sys_dict_type,
要求查出所有的company,遍历company表中的id,
根据id插入sys_dict_type表,
要求company表中的
id改成company_id,
name改成dict_name,
作为sys_dict_type表的字段属性插入,
sql如下
新建存储过程
-- 定义存储过程和游标
CREATE PROCEDURE InsertIntoNewTable ()
BEGIN
-- 定义游标判断条件
DECLARE
done INT DEFAULT 0;
-- 定义接收值的字段
DECLARE
company_id BIGINT;
DECLARE
dict_name VARCHAR ( 255 );
-- 定义游标
DECLARE
cur CURSOR FOR
SELECT id,NAME FROM sys_company;
-- 声明结束处理器
DECLARE
CONTINUE HANDLER FOR NOT FOUND
SET done = 1;
-- 打开游标
OPEN cur;
-- 遍历查询结果
read_loop :LOOP
FETCH cur INTO company_id, dict_name;
IF
done THEN
LEAVE read_loop;
END IF;
-- 插入数据到新表
INSERT INTO sys_dict_type ( company_id, dict_name )
VALUES
( company_id, dict_name );
END LOOP;
-- 关闭游标
CLOSE cur;
END
调用存储过程
-- 调用存储过程
CALL InsertIntoNewTable ();