日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sql解析json oracle,oracle 11g plsql解析json数据示例1

發布時間:2024/4/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql解析json oracle,oracle 11g plsql解析json数据示例1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下存儲過程將數據庫表中的clob類型字段(存儲的內容為對應Json格式數據)讀取出來,對其解析,進行相關業務操作

CREATE OR REPLACE PROCEDURE xq_midso_gen(p_id IN NUMBER) AS

----------------------------------------------------------

--author:xy

--date:20180627

--description:

/*

FOR (查詢實際表[訂單接口 XQ_MIDSO]中的[是否生成訂單]為Y的記錄) LOOP

根據接口信息的json信息生成未提交的發貨訂單。

生成發貨訂單頭表:

單據日期取SYSDATE。

訂單類型取新貨訂單。

發貨店倉取總部店倉。

收貨店倉取接口中的customer_name對應的經銷商下的任一店倉(根據名稱匹配)。

鮮橋訂單編碼取接口中的ordercode。

備注:由鮮橋接口自動生成!

調用存儲過程:B_SO_AC。

生成發貨訂單明細:

條碼、款號、ASI取接口中的product_name對應條碼的值。

數量取接口中的amount。

調用存儲過程:B_SOITEM_ACM。

調用存儲過程:B_SO_AM。

END LOOP;

*/

/*

*/

----------------------------------------------------------

v_injson json; --用于將接口信息轉換為json格式

v_b_so_id b_so.id%TYPE; --要使用的發貨訂單ID

v_b_so_docno b_so.docno%TYPE; --發貨訂單據編號

v_table_id ad_table.id%TYPE; --發貨訂單m_agtpur表的id

v_ordercode b_so.xq_ordercode%TYPE; --發貨訂單鮮橋訂單編碼

v_c_store_id c_store.id%TYPE; --總部店倉ID

v_customer_name c_customer.name%TYPE; --訂單頭信息中的經銷商名稱

v_cc_store_id c_store.id%TYPE; --經銷商下任一id

v_delivery_time VARCHAR2(20); --配送時間(發貨日期)

v_delivery_time1 NUMBER(8); --配送時間(發貨日期)

v_delivery_address b_so.dest_address%TYPE; --收貨地址

v_amount b_soitem.qty%TYPE; --數量

v_bodylist json_list; --訂單明細信息列表

v_onejson json; --用于解析每一個明細數據

v_m_product_id m_product.id%TYPE; --款號

v_m_productalias_name m_product_alias.no%TYPE; --條碼名

v_m_productalias_id m_product_alias.id%TYPE; --條碼id

v_asi b_soitem.m_attributesetinstance_id%TYPE; --asi

v_b_soitem_id b_soitem.id%TYPE; --發貨訂單明細id

v_code NUMBER(3);

v_message VARCHAR2(500);

v_clob_varchar2 VARCHAR2(4000);

BEGIN

--查詢實際表[訂單接口 XQ_MIDSO]中的[是否生成訂單]為Y的記錄

FOR v_list IN (SELECT xms.id, xms.ad_client_id, xms.ad_org_id,

xms.creationdate, xms.ownerid, xms.errormeg

FROM xq_midso xms

WHERE xms.is_so = 'Y') LOOP

BEGIN

--獲取接口信息

SELECT dbms_lob.substr(xms.param)

INTO v_clob_varchar2

FROM xq_midso xms

WHERE xms.id = v_list.id;

v_injson := json(v_clob_varchar2);

--獲取headerlist:orderHeader

--v_id := json_ext.get_string(v_injson, 'CallInfo.orderHeader.id');

v_ordercode := json_ext.get_string(v_injson,

'CallInfo.orderHeader.ordercode');

v_customer_name := json_ext.get_string(v_injson,

'CallInfo.orderHeader.customer_name');

v_delivery_time := substr(json_ext.get_string(v_injson,

'CallInfo.orderHeader.delivery_time'),

1, 10);

v_delivery_time1 := to_number(REPLACE(v_delivery_time, '-', ''));

v_delivery_address := json_ext.get_string(v_injson,

'CallInfo.orderHeader.delivery_address');

--獲取表b_so的id

SELECT id

INTO v_table_id

FROM ad_table

WHERE NAME = upper('b_so');

--自動生成單據編號

SELECT t.sequencename

INTO v_b_so_docno

FROM ad_column t

WHERE t.ad_table_id = v_table_id

AND t.dbname = 'DOCNO';

v_b_so_docno := get_sequenceno(v_b_so_docno, v_list.ad_client_id);

--獲取要使用的發貨訂單id

v_b_so_id := get_sequences('B_SO');

--獲取總部店倉ID

SELECT cs.id

INTO v_c_store_id

FROM c_store cs

WHERE cs.name = '總部倉庫'

AND cs.ad_client_id = v_list.ad_client_id;

BEGIN

--獲取對應經銷商下任一店倉ID:v_cc_store_id

SELECT nvl(cs.id, 0)

INTO v_cc_store_id

FROM c_store cs

JOIN c_customer ccu

ON (cs.c_customer_id = ccu.id AND ccu.name = v_customer_name)

WHERE rownum <= 1;

EXCEPTION

WHEN no_data_found THEN

v_cc_store_id := NULL;

END;

/*

生成發貨訂單頭表:

單據日期取SYSDATE。

訂單類型取新貨訂單。

發貨店倉取總部店倉。

收貨店倉取接口中的customer_name對應的經銷商下的任一店倉(根據名稱匹配)。

鮮橋訂單編碼取接口中的ordercode。

備注:由鮮橋接口自動生成!

調用存儲過程:B_SO_AC。

*/

--dbms_output.put_line('xuyang123:v_b_so_docno:' || v_b_so_docno);

BEGIN

INSERT INTO b_so

(id, billdate, docno, doctype, c_store_id, c_dest_id,

xq_ordercode, predateout, dest_address, description,

ad_client_id, ad_org_id, ownerid, creationdate, status,

isactive)

VALUES

(v_b_so_id, to_number(to_char(SYSDATE, 'yyyymmdd')),

v_b_so_docno, 'FWD', v_c_store_id, v_cc_store_id,

v_ordercode, v_delivery_time1, v_delivery_address,

'由鮮橋接口自動生成!', v_list.ad_client_id, v_list.ad_org_id,

v_list.ownerid, SYSDATE, 1, 'Y');

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line('(debug)訂單接口記錄id:' || v_list.id ||

',生成發貨訂單發生異常:' || SQLERRM);

CONTINUE;

END;

--調用存儲過程:B_SO_AC。

BEGIN

b_so_ac(v_b_so_id);

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line('發貨訂單記錄id:' || v_b_so_id ||

',調用發貨訂單ac程序b_so_ac發生異常:' || SQLERRM);

END;

/*獲取明細數據,插入到發貨訂單明細表*/

/*

生成發貨訂單明細:

條碼、款號、ASI取接口中的product_name對應條碼的值。

數量取接口中的amount。

調用存儲過程:B_SOITEM_ACM。

調用存儲過程:B_SO_AM。

*/

v_bodylist := json_list();

v_onejson := json();

--獲取body:orderBody

v_bodylist := json_ext.get_json_list(v_injson, 'CallInfo.orderBody');

--循環獲取明細數據,并插入數據庫中

FOR idx IN 1 .. v_bodylist.count LOOP

--讀取每個明細信息

v_onejson := json(v_bodylist.get_elem(idx));

v_m_productalias_name := json_ext.get_string(v_onejson,

'product_name');

v_amount := to_number(json_ext.get_string(v_onejson, 'amount'));

--獲取品名對應的款號,條碼,asi

BEGIN

SELECT mpa.id, mpa.m_product_id,

mpa.m_attributesetinstance_id

INTO v_m_productalias_id, v_m_product_id, v_asi

FROM m_product_alias mpa

WHERE mpa.no = v_m_productalias_name;

EXCEPTION

WHEN no_data_found THEN

dbms_output.put_line('條碼:' || v_m_productalias_name ||

',在條碼檔案中不存在!');

CONTINUE;

END;

--獲取即將使用的發貨訂單明細記錄id

v_b_soitem_id := get_sequences('bo_soitem');

--插入發貨訂單明細表

INSERT INTO b_soitem

(id, b_so_id, m_productalias_id, m_product_id,

m_attributesetinstance_id, qty)

VALUES

(v_b_soitem_id, v_b_so_id, v_m_productalias_id,

v_m_product_id, v_asi, v_amount);

--調用存儲過程:B_SOITEM_ACM

BEGIN

b_soitem_acm(v_b_soitem_id);

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line('發貨訂單明細記錄id:' || v_b_soitem_id ||

',調用發貨訂單明細acm程序b_soitem_acm發生異常:' ||

SQLERRM);

END;

--調用存儲過程:B_SO_AM

BEGIN

b_so_am(v_b_so_id, v_code, v_message);

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line('發貨訂單記錄id:' || v_b_so_id ||

',調用發貨訂單am程序B_SO_AM發生異常:' ||

SQLERRM);

END;

END LOOP;

--生成發貨訂單后,更新訂單接口xq_midso當前記錄is_so為‘N’

UPDATE xq_midso xms

SET xms.is_so = 'N'

WHERE xms.id = v_list.id;

COMMIT;

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line('訂單接口記錄id:' || v_list.id ||

',生成發貨訂單發生異常:' || SQLERRM);

END;

END LOOP;

END;

總結

以上是生活随笔為你收集整理的sql解析json oracle,oracle 11g plsql解析json数据示例1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。