zoukankan      html  css  js  c++  java
  • 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;
    /
    

      

  • 相关阅读:
    进程池和线程池
    TCP并发、GIL、锁
    进程间通信
    装饰器与反射
    装饰器大全
    面向对象三大特征: 封装 继承 多态
    面向对象 魔术方法
    魔术方法
    ubuntu 中导 tarfile,win 不亲切
    os VS shutil
  • 原文地址:https://www.cnblogs.com/Jeffrey-xu/p/9428806.html
Copyright © 2011-2022 走看看