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;