oracle批量联机,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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值