概述
这次数据迁移主要涉及的数据为,从一张表迁移到另一张表,同时将一列 JDBCType JSON (JsonArray)的数据拆分成多个字段,这里用到了存储过程,其中用到了双重循环。
delimiter // #定义标识符为双斜杠
drop procedure if exists outFor; #如果存在test存储过程则删除
create procedure outFor() #创建无参存储过程,名称为outFor
begin
declare i int; #申明变量
#申明变量
set i = 0; #变量赋值
set @k = (SELECT count(1) FROM (select a.app_list from avn_assets a inner join avn_asset_new b on a.id = b.id) c);
while i < @k do #结束循环的条件: 跳出while循环
# 内层循环
#--------------------
set @m = (SELECT json_length(app_list) FROM (SELECT (@i:=@i+1) sq, c.app_list FROM (select a.app_list from avn_assets a inner join avn_asset_new b on a.id = b.id) c, (SELECT @i:=-1) as sq) temp WHERE temp.sq = i);
# SELECT concat("i",i,@m);
set @j = 0;
WHILE @j < @m DO
INSERT INTO avn_asset_new_app(uid,app_name,app_sign,created_at,updated_at)
SELECT JSON_UNQUOTE(json_extract(app_list,CONCAT('$[',@j,'].uid'))),
JSON_UNQUOTE(json_extract(app_list,CONCAT('$[',@j,'].app_name'))),
created_at,updated_at FROM (SELECT (@i:=@i+1) sq,c.id, c.app_list,c.updated_at FROM (select a.id,a.app_list,a.created_at, from avn_assets a inner join avn_asset_new b on a.id = b.id) c, (SELECT @i:=-1) as sq) temp WHERE temp.sq = i;
set @j = @j + 1;
END WHILE;
#--------------------
set i = i + 1; #循环一次,i加一
end while; #结束while循环
end
// #结束定义语句
call outFor();
最后
以上就是默默可乐为你收集整理的Mysql 数据迁移引发的sql 双重 for 循环 存储过程的编写 (包含Mysql 5.7 JDBCType 为 json 的字段的操作 )的全部内容,希望文章能够帮你解决Mysql 数据迁移引发的sql 双重 for 循环 存储过程的编写 (包含Mysql 5.7 JDBCType 为 json 的字段的操作 )所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复