mysql儲存過程引數為陣列或者物件的處理方式
阿新 • • 發佈:2018-12-20
問題場景:做一個物品系統, 需要批量存入。
思考:儲存過程的的引數不支援陣列,是否可以用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);
測試結果:
說明:
- 這段儲存過程的的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