我是靠谱客的博主 含糊高跟鞋,最近开发中收集的这篇文章主要介绍mysql存储过程参数为数组或者对象的处理方式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题场景:做一个物品系统, 需要批量存入。

思考:储存过程的的参数不支持数组,是否可以用json字符串代替

测试用的JSON字符串:

let obj = {
    itemlist:[
        {
            regid:0,
            iteminfo:{
                item_uid:"10441",
            },
            amoount:1
        },
        {
            regid:10,
            amoount:1
        }
    ]
}





{"itemlist":[{"regid":0,"iteminfo":{"item_uid":"10441"},"amount":1},{"regid":10,"amount":1}],"itemcount":2}

存储过程的代码:

DELIMITER  $$
CREATE PROCEDURE testJson(IN json_str VARCHAR(4096), OUT itemcount INT, 
                        OUT info VARCHAR(128), OUT info1 VARCHAR(64),  OUT info2 VARCHAR(64), OUT regid BIGINT)
BEGIN
    DECLARE item_uid VARCHAR(128);
    DECLARE amount , i INT;
    SET itemcount = json_str->>"$.itemcount";
    SET info = json_str->>"$.itemlist";
    SET info1 = json_str->>"$.itemlist[0]";
    SET info2 = json_str->>"$.itemlist[1]";
    set regid = info1->>"$.regid";
END$$

调用测试:

CALL testJson('{"itemlist":[{"regid":10,"amount":1}, {"regid":0,"iteminfo":{"item_uid":"10441"},"amount":1}],"itemcount":2}', @itemcount, @info, @info1, @info2, @regid);

测试结果:

 

说明:

  1. 这段存储过程的的json字符串 里加入了itemcount字段, 用来表示itemlist的数量。感觉应该有办法可以通过itemlist直接获得,但是因为赶进度, 先由调用的程序计算出itemcount传进来。
  2. 还不大理解$.和->>的意义, 查了一下, 没找到, 有空了再找找。应该是mysql 的json类型相关的内容
  3. 上面的一些用法是mysql的json的字段类型, 我是用的5.7的mysql测试的, 不确定更早的版本是否支持

参考:

https://blog.csdn.net/qq_25175063/article/details/79969204

https://www.cnblogs.com/kuangke/p/5607471.html

 

最后

以上就是含糊高跟鞋为你收集整理的mysql存储过程参数为数组或者对象的处理方式的全部内容,希望文章能够帮你解决mysql存储过程参数为数组或者对象的处理方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部