# 创建一个存储过程,解析某表的一个json串字段,并拆分字段存入到表
# 要解析的json串格式 : [{"count":22,"prizeType":6,"prizeValue":11012},{"count":44,"prizeType":6,"prizeValue":21000}]
delimiter $$
use `marketcenter`$$
drop procedure if exists `p_gift_count`$$
create definer=`root`@`%` procedure `p_gift_count`()
begin
declare i int default 0; #内层循环,json串的列表循环
declare iid int default 0; #表记录的主键id
declare jsonStr varchar(255); #接收json串字段
declare flag int default 0; #游标循环结束标识
declare cur cursor for select t.`id`,t.`attr` from prize_package_template t; #定义游标
declare continue handler for not found set flag=1;#游标循环结束条件
delete from mldn.`temp_prize_template`;
open cur;
fetch cur into iid,jsonStr; #游标循环获取数据并赋值
while flag<>1 do
#select t.`attr`->>'$[*]' into @aa from prize_package_template t where t.id=12000;
select json_length(jsonStr);
set @len=json_length(jsonStr); #获取json列表字符串的长度
set i=0;
while i<@len do
select json_extract(jsonStr,concat('$[',i,']')) into @res; #按顺序解析 json列表元素
select i;
select @res;
#解析 json的具体字段
insert into mldn.`temp_prize_template` values(iid,json_extract(@res,'$.prizeValue'),json_extract(@res,'$.prizeType'),json_extract(@res,'$.count'));
set i=i+1;
end while;
fetch cur into iid,jsonStr;
end while;
end$$
delimiter ;