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;

  

原文地址:https://www.cnblogs.com/Jeffrey-xu/p/9479598.html