ORACLE 簡易讀取解析JSON字符串


CREATE OR REPLACE PROCEDURE wdgj_in_result_gen(p_json_varchar IN VARCHAR2,p_code out number,p_message out varchar2) AS
    ----------------------------------------------------------
    
    --將接口返回的數據插入到中間表【訂單主表  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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM