mysql json 存储过程,mysql存储过程中遍历json数据

一、今天在开发中遇到mysql中遍历json数据的需求,查了些资料,然后特此记录,

二、在mysql5.7中是有一个方法用来取json数据的,JSON_EXTRACT(JSON.Val,key),详细代码如下

三、代码如下:

CREATE DEFINER=`root`@`localhost` PROCEDURE `fun_sys_user_local_mobileReg`(pUserId int,pIP varchar(95),params varchar(5000),out pRlt varchar(800))

BEGIN

-- BS用户移动版启用--本地存储过程

-- {"funName":"sys_user_mobileReg","uuid":"c39a37r98e06t40o49p30","localFunName":"sys_user_local_mobileReg","userNo":{"userNo0":"admin","userNo1":"test","userNo2":"hyc"},"userNoLen":3}

declare vUserNo,vUserNoTmp,vUserNoTmpKey varchar(200);

declare vUserNoLen int;

declare i int default 0;

set vUserNo = params->>'$.userNo';

set vUserNoLen = params->>'$.userNoLen';

while i

set vUserNoTmpKey = concat('$.userNo',i);

select JSON_EXTRACT(vUserNo, vUserNoTmpKey) into vUserNoTmp;

set vUserNoTmp = replace(vUserNoTmp,'\"','');

update user set mobileActive = 1 where userNo = vUserNoTmp;

set i = i+1;

end while;

set pRlt=concat('{"success":true,"msg":""}');

end

CREATE DEFINER=`jovie`@`%` PROCEDURE `fun_api_uploadEmpAttInfo`(pUserId int,pIP varchar(95),params varchar(5000),out pRlt varchar(800))

BEGIN

-- 考勤记录处理

-- {token:"4fb7edb9-8f21-4295-83ad-8552590deb0f",methodName:"uploadEmpAttInfo",clockNo:"006",

-- recData:[{"clockNo":"006","cardNo":"10066","cardTime":"2018-7-13 13:58:21"},{"clockNo":"006","cardNo":"10066","cardTime":"2018-7-13 13:58:23"}]}

declare vClockNo,vCardNo,vCardTime,vOriginal,vKeyTmp varchar(45);

declare vRecData,recTmp varchar(5000);

declare vEmpId,i,vRecLen int default 0;

declare vCardDate date;

set vRecData = params->>'$.recData';

set vRecLen = JSON_LENGTH(vRecData);

while i < vRecLen do

set vKeyTmp = concat('$[',i,']');

select JSON_EXTRACT(vRecData, vKeyTmp) into recTmp;

set vClockNo = JSON_EXTRACT(recTmp, '$.clockNo');

set vClockNo = replace(vClockNo,'\"','');

set vCardNo = JSON_EXTRACT(recTmp, '$.cardNo');

set vCardNo = replace(vCardNo,'\"','');

set vCardDate = JSON_EXTRACT(recTmp, '$.cardDate');

set vCardDate = replace(vCardDate,'\"','');

set vCardTime = JSON_EXTRACT(recTmp, '$.cardTime');

set vCardTime = replace(vCardTime,'\"','');

set vCardDate = cast(vCardTime as date);

set vOriginal = concat(vClockNo,'_',vCardNo,'_',vCardTime);

select empId into vEmpId from kqcard where cardNo = vCardNo;

set i = i + 1;

if not exists(select original from epcardoriginalrec where original = vOriginal) then

insert into epcardrec (clockNo,cardNo,empId,cardDate,cardTime,original)

values (vClockNo,vCardNo,vEmpId,vCardDate,vCardTime,vOriginal);

end if;

end while;

set pRlt= concat('{"success":true,"total":1,"msg":"考勤数据插入成功!"}');

end

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值