ORACLE解析JSON数据示例(批量写入数据库)
1. 如下存储过程,对大批量的json格式数据进行解析,并对解析得出的数据批量写入数据库中:
CREATE OR REPLACE PROCEDURE list_productalias_read(p_json IN CLOB, p_code OUT NUMBER, p_message OUT VARCHAR2) AS ---------------------------------------------------------- --author:xy --date:20180809 --description:获取接口信息,解析并传入商品目录中间表 ---------------------------------------------------------- v_injson json; v_bodylist json_list; --款号json列表 v_bodylist1 json_list; --条码json列表 v_onejson json; --用于解析每一个款号数据 v_onejson1 json; --用于解析每一个条码数据 TYPE t_products IS TABLE OF list_product%ROWTYPE INDEX BY PLS_INTEGER; v_products t_products; TYPE t_productalias IS TABLE OF list_product_alias%ROWTYPE INDEX BY PLS_INTEGER; v_productalias t_productalias; BEGIN --将接口信息转化为json格式 v_injson := json(p_json); --获取款号和条码数据,插入到中间表list_product和list_product_alias表 v_bodylist := json_list(); v_onejson := json(); v_bodylist1 := json_list(); v_onejson1 := json(); v_bodylist := json_ext.get_json_list(v_injson, 'list'); --循环获取款号数据,并插入中间表中 FOR idx IN 1 .. v_bodylist.count LOOP v_onejson := json(v_bodylist.get_elem(idx)); v_products(idx).id := get_sequences('LIST_PRODUCT'); v_products(idx).ad_client_id := 37; v_products(idx).ad_org_id := 27; v_products(idx).create_date := SYSDATE; v_products(idx).writedate := SYSDATE; v_products(idx).ediflag := 80; v_products(idx).ownerid := 893; v_products(idx).modifierid := 893; v_products(idx).creationdate := SYSDATE; v_products(idx).modifieddate := SYSDATE; v_products(idx).isactive := 'Y'; v_products(idx).prod_id := json_ext.get_string(v_onejson, 'PROD_ID'); v_products(idx).name := json_ext.get_string(v_onejson, 'NAME'); v_products(idx).basic_uom := json_ext.get_string(v_onejson, 'BASIC_UOM'); v_products(idx).model := json_ext.get_string(v_onejson, 'MODEL'); v_products(idx).orientation := json_ext.get_string(v_onejson, 'ORIENTATION'); v_products(idx).on_brand_prc := json_ext.get_number(v_onejson, 'ON_BRAND_PRC'); v_products(idx).precost := json_ext.get_number(v_onejson, 'PRECOST'); v_products(idx).status1 := json_ext.get_string(v_onejson, 'STATUS1'); v_products(idx).in_ctrl := json_ext.get_string(v_onejson, 'IN_CTRL'); v_products(idx).kind := json_ext.get_string(v_onejson, 'KIND'); v_products(idx).old_brand_id := json_ext.get_string(v_onejson, 'OLD_BRAND_ID'); v_products(idx).puc_mode := json_ext.get_string(v_onejson, 'PUC_MODE'); v_products(idx).isagt := json_ext.get_string(v_onejson, 'ISAGT'); v_products(idx).isspesupply := json_ext.get_string(v_onejson, 'ISSPESUPPLY'); v_products(idx).remark := json_ext.get_string(v_onejson, 'REMARK'); v_products(idx).prod_year := json_ext.get_string(v_onejson, 'PROD_YEAR'); v_products(idx).prod_season := json_ext.get_string(v_onejson, 'PROD_SEASON'); v_products(idx).prod_theme := json_ext.get_string(v_onejson, 'PROD_THEME'); v_products(idx).plan_batch := json_ext.get_string(v_onejson, 'PLAN_BATCH'); v_products(idx).on_sale_date := substr(to_char(json_ext.get_number(v_onejson, 'ON_SALE_DATE') / (1000 * 60 * 60 * 24) + to_date('1970-01-01 08:00:00', 'YYYY/MM/DD HH:MI:SS'), 'YYYYMMDD HH24:MI:SS'), 1, 8); v_products(idx).series := json_ext.get_string(v_onejson, 'SERIES'); v_products(idx).themedesign := json_ext.get_string(v_onejson, 'THEMEDESIGN'); v_products(idx).describemodule := json_ext.get_string(v_onejson, 'DESCRIBEMODULE'); v_products(idx).sceneslife := json_ext.get_string(v_onejson, 'SCENESLIFE'); v_products(idx).brand_id := json_ext.get_string(v_onejson, 'BRAND_ID'); v_products(idx).describesys := json_ext.get_string(v_onejson, 'DESCRIBESYS'); v_products(idx).prod_line := json_ext.get_string(v_onejson, 'PROD_LINE'); v_products(idx).prod_partm := json_ext.get_string(v_onejson, 'PROD_PARTM'); v_products(idx).prod_group := json_ext.get_string(v_onejson, 'PROD_GROUP'); v_products(idx).prod_sub_group := json_ext.get_string(v_onejson, 'PROD_SUB_GROUP'); v_products(idx).prod_sorts := json_ext.get_string(v_onejson, 'PROD_SORTS'); v_bodylist1 := json_ext.get_json_list(v_onejson, 'LIST_PRODUCT_ALIAS'); FOR idx1 IN 1 .. v_bodylist1.count LOOP --读取每个条码信息,并插入中间表 v_onejson1 := json(v_bodylist1.get_elem(idx1)); v_productalias(idx1).id := get_sequences('LIST_PRODUCT_ALIAS'); v_productalias(idx1).ad_client_id := 37; v_productalias(idx1).ad_org_id := 27; v_productalias(idx1).create_date := SYSDATE; v_productalias(idx1).writedate := SYSDATE; v_productalias(idx1).ediflag := 80; v_productalias(idx1).ownerid := 893; v_productalias(idx1).modifierid := 893; v_productalias(idx1).creationdate := SYSDATE; v_productalias(idx1).modifieddate := SYSDATE; v_productalias(idx1).isactive := 'Y'; v_productalias(idx1).prod_cls_id := json_ext.get_string(v_onejson1, 'PROD_CLS_ID'); v_productalias(idx1).color := json_ext.get_string(v_onejson1, 'COLOR'); v_productalias(idx1).desc_color := json_ext.get_string(v_onejson1, 'DESC_COLOR'); v_productalias(idx1).prod_grid := json_ext.get_string(v_onejson1, 'PROD_GRID'); v_productalias(idx1).addit_desc := json_ext.get_string(v_onejson1, 'ADDIT_DESC'); v_productalias(idx1).inner_bc := json_ext.get_string(v_onejson1, 'INNER_BC'); v_productalias(idx1).intnl_bc := json_ext.get_string(v_onejson1, 'INTNL_BC'); v_productalias(idx1).reckon_type := json_ext.get_string(v_onejson1, 'RECKON_TYPE'); v_productalias(idx1).is_sap_manage := json_ext.get_string(v_onejson1, 'IS_SAP_MANAGE'); v_productalias(idx1).is_sample := json_ext.get_string(v_onejson1, 'IS_SAMPLE'); v_productalias(idx1).sap_zzstatus := json_ext.get_string(v_onejson1, 'SAP_ZZSTATUS'); v_productalias(idx1).prod_state := json_ext.get_string(v_onejson1, 'PROD_STATE'); v_productalias(idx1).prodnum := json_ext.get_string(v_onejson1, 'PRODNUM'); END LOOP; END LOOP; BEGIN FORALL idx IN v_products.first .. v_products.last INSERT INTO list_product VALUES v_products (idx); EXCEPTION WHEN OTHERS THEN p_message := p_message || SQLERRM; END; BEGIN FORALL idx IN v_productalias.first .. v_productalias.last INSERT INTO list_product_alias VALUES v_productalias (idx); EXCEPTION WHEN OTHERS THEN p_message := p_message || SQLERRM; END; p_code := 0; END;