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;