oracle11 java json,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;

/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值