ORACLE解析JSON数据示例(使用事务级临时表:批量写入数据库)
1:对于批量的json数据,这里使用事务级临时表,来暂存从json解析出各字段的值,最后再批量插入物理表中。
CREATE OR REPLACE PROCEDURE list_productalias_read(p_json IN CLOB, p_code OUT NUMBER, p_message OUT VARCHAR2) AS ---------------------------------------------------------- --author:xy --date:20180820 --description:获取接口信息,解析并传入商品目录中间表 ---------------------------------------------------------- v_injson json; v_bodylist json_list; --款号json列表 v_bodylist1 json_list; --条码json列表 v_onejson json; --用于解析每一个款号数据 v_onejson1 json; --用于解析每一个条码数据 v_starttime INTEGER; --开始时间 v_endtime INTEGER; --结束时间 BEGIN v_starttime := dbms_utility.get_time; --将接口信息转化为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)); INSERT INTO rp_list_product (id, ad_client_id, ad_org_id, create_date, writedate, ediflag, ownerid, modifierid, creationdate, modifieddate, isactive, prod_id, NAME, basic_uom, model, orientation, on_brand_prc, precost, status1, in_ctrl, kind, old_brand_id, puc_mode, isagt, isspesupply, remark, prod_year, prod_season, for_season, prod_theme, plan_batch, on_sale_date, series, themedesign, describemodule, sceneslife, brand_id, describesys, prod_line, prod_partm, prod_group, prod_sub_group, prod_sorts) VALUES (get_sequences('LIST_PRODUCT'), 37, 27, SYSDATE, SYSDATE, 80, 893, 893, SYSDATE, SYSDATE, 'Y', json_ext.get_string(v_onejson, 'PROD_ID'), json_ext.get_string(v_onejson, 'NAME'), json_ext.get_string(v_onejson, 'BASIC_UOM'), json_ext.get_string(v_onejson, 'MODEL'), json_ext.get_string(v_onejson, 'ORIENTATION'), json_ext.get_number(v_onejson, 'ON_BRAND_PRC'), json_ext.get_number(v_onejson, 'PRECOST'), json_ext.get_string(v_onejson, 'STATUS1'), json_ext.get_string(v_onejson, 'IN_CTRL'), json_ext.get_string(v_onejson, 'KIND'), json_ext.get_string(v_onejson, 'OLD_BRAND_ID'), json_ext.get_string(v_onejson, 'PUC_MODE'), json_ext.get_string(v_onejson, 'ISAGT'), json_ext.get_string(v_onejson, 'ISSPESUPPLY'), json_ext.get_string(v_onejson, 'REMARK'), json_ext.get_string(v_onejson, 'PROD_YEAR'), json_ext.get_string(v_onejson, 'PROD_SEASON'), json_ext.get_string(v_onejson, 'FOR_SEASON'), json_ext.get_string(v_onejson, 'PROD_THEME'), json_ext.get_string(v_onejson, 'PLAN_BATCH'), 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), json_ext.get_string(v_onejson, 'SERIES'), json_ext.get_string(v_onejson, 'THEMEDESIGN'), json_ext.get_string(v_onejson, 'DESCRIBEMODULE'), json_ext.get_string(v_onejson, 'SCENESLIFE'), json_ext.get_string(v_onejson, 'BRAND_ID'), json_ext.get_string(v_onejson, 'DESCRIBESYS'), json_ext.get_string(v_onejson, 'PROD_LINE'), json_ext.get_string(v_onejson, 'PROD_PARTM'), json_ext.get_string(v_onejson, 'PROD_GROUP'), json_ext.get_string(v_onejson, 'PROD_SUB_GROUP'), 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)); INSERT INTO rp_list_product_alias (id, ad_client_id, ad_org_id, create_date, writedate, ediflag, ownerid, modifierid, creationdate, modifieddate, isactive, prod_cls_id, color, desc_color, spec, desc_spec, prod_grid, addit_desc, inner_bc, intnl_bc, reckon_type, is_sap_manage, is_sample, sap_zzstatus, prod_state, prodnum) VALUES (get_sequences('LIST_PRODUCT_ALIAS'), 37, 27, SYSDATE, SYSDATE, 80, 893, 893, SYSDATE, SYSDATE, 'Y', json_ext.get_string(v_onejson1, 'PROD_CLS_ID'), json_ext.get_string(v_onejson1, 'COLOR'), json_ext.get_string(v_onejson1, 'DESC_COLOR'), json_ext.get_string(v_onejson1, 'SPEC'), json_ext.get_string(v_onejson1, 'DESC_SPEC'), json_ext.get_string(v_onejson1, 'PROD_GRID'), json_ext.get_string(v_onejson1, 'ADDIT_DESC'), json_ext.get_string(v_onejson1, 'INNER_BC'), json_ext.get_string(v_onejson1, 'INTNL_BC'), json_ext.get_string(v_onejson1, 'RECKON_TYPE'), json_ext.get_string(v_onejson1, 'IS_SAP_MANAGE'), json_ext.get_string(v_onejson1, 'IS_SAMPLE'), json_ext.get_string(v_onejson1, 'SAP_ZZSTATUS'), json_ext.get_string(v_onejson1, 'PROD_STATE'), json_ext.get_string(v_onejson1, 'PRODNUM')); END LOOP; END LOOP; BEGIN INSERT INTO list_product SELECT * FROM rp_list_product; EXCEPTION WHEN OTHERS THEN p_message := p_message || SQLERRM; END; BEGIN INSERT INTO list_product_alias SELECT * FROM rp_list_product_alias; EXCEPTION WHEN OTHERS THEN p_message := p_message || SQLERRM; END; v_endtime := dbms_utility.get_time; p_message := p_message || '--inserting time:' || (v_endtime - v_starttime) / 100; p_code := 0; END;