问题场景:做一个物品系统, 需要批量存入。
思考:储存过程的的参数不支持数组,是否可以用json字符串代替
测试用的JSON字符串:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22let 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}
存储过程的代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12DELIMITER $$ 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$$
调用测试:
复制代码
1CALL testJson('{"itemlist":[{"regid":10,"amount":1}, {"regid":0,"iteminfo":{"item_uid":"10441"},"amount":1}],"itemcount":2}', @itemcount, @info, @info1, @info2, @regid);
测试结果:
说明:
- 这段存储过程的的json字符串 里加入了itemcount字段, 用来表示itemlist的数量。感觉应该有办法可以通过itemlist直接获得,但是因为赶进度, 先由调用的程序计算出itemcount传进来。
- 还不大理解$.和->>的意义, 查了一下, 没找到, 有空了再找找。应该是mysql 的json类型相关的内容
- 上面的一些用法是mysql的json的字段类型, 我是用的5.7的mysql测试的, 不确定更早的版本是否支持
参考:
https://blog.csdn.net/qq_25175063/article/details/79969204
https://www.cnblogs.com/kuangke/p/5607471.html
最后
以上就是含糊高跟鞋最近收集整理的关于mysql存储过程参数为数组或者对象的处理方式的全部内容,更多相关mysql存储过程参数为数组或者对象内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复