oracle 11g plsql解析json数据示例2
1:Java程序中调用以下存储过程,传入特定json格式数据,此存储过程根据协议将其信息解析,并写入数据库中。
CREATE OR REPLACE PROCEDURE wdgj_in_result_gen(p_json_varchar IN VARCHAR2,p_code out number,p_message out varchar2) AS ---------------------------------------------------------- --author:xuyang --date:20180705 --description: --将接口返回的数据插入到中间表【订单主表 WDGJ_RESULT_RETAIL】和【订单子表 WDGJ_RESULT_RETAILITEM】中: --(字段对照关系见接口地址以及本文档的下一个需求的表结构) --如果调用存储过程成功,则返回成功。 --如果调用失败,则返回失败 ---------------------------------------------------------- v_injson json; v_bodylist json_list; --明细信息json列表 v_onejson json; --用于解析每一个明细数据 --要插入主表的记录变量 v_id wdgj_in_result.id%TYPE; --入库回传主表记录id v_searchno wdgj_in_result.searchno%TYPE; v_warehouseno wdgj_in_result.warehouseno%TYPE; v_end_time wdgj_in_result.end_time%TYPE; v_start_time wdgj_in_result.start_time%TYPE; --要插入子表的记录变量 v_item_id wdgj_in_resultitem.id%TYPE; --入库回传明细表记录id v_qty wdgj_in_resultitem.qty%TYPE; --入库数量 v_no wdgj_in_resultitem.no%TYPE; --条码 v_refno wdgj_in_resultitem.refno%TYPE; --入库单号 BEGIN --将接口信息转化为json格式 v_injson := json(p_json_varchar); --获取要插入头表的字段信息 v_searchno := json_ext.get_string(v_injson, 'searchno'); v_warehouseno := json_ext.get_string(v_injson, 'warehouseno'); v_end_time := json_ext.get_string(v_injson, 'END_TIME'); v_start_time := json_ext.get_string(v_injson, 'START_TIME'); v_id := get_sequences(upper('wdgj_in_result')); --退换货单主表插入记录 INSERT INTO wdgj_in_result (id, searchno, warehouseno, start_time, end_time, isactive) VALUES (v_id, v_searchno, v_warehouseno, v_start_time, v_end_time, 'Y'); --获取明细数据,插入到发货订单明细表 v_bodylist := json_list(); v_onejson := json(); --获取body:orderBody v_bodylist := json_ext.get_json_list(v_injson, 'goodsList'); --循环获取明细数据,并插入数据库中 FOR idx IN 1 .. v_bodylist.count LOOP --读取每个明细信息 v_onejson := json(v_bodylist.get_elem(idx)); v_qty := to_number(json_ext.get_string(v_onejson, 'QTY')); v_no := json_ext.get_string(v_onejson, 'NO'); v_refno := json_ext.get_string(v_onejson, 'REFNO'); --获取要使用的明细记录id v_item_id := get_sequences(upper('wdgj_in_resultitem')); --插入明细表 INSERT INTO wdgj_in_resultitem (id, qty, no, refno, isactive) VALUES (v_item_id, v_qty, v_no, v_refno, 'Y'); END LOOP; p_code := 1; p_message := ''; END; /