• 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;
    

      

  • 相关阅读:
    Idea tabs多行
    IDEA ,设置滚轮修改字体大小
    IDEA设置行号和方法间的分隔符
    设置超过指定 import 个数,改为*
    systemctl 命令完全指南
    如何让不断增加的目录只保留五个文件?
    Django框架重定向功能
    Django框架疫情信息平台!!!
    Django框架模板语法之for表单应用!!!
    Django框架模板语法之深度查询!!!
  • 原文地址:https://www.cnblogs.com/Jeffrey-xu/p/9479598.html
Copyright © 2020-2023  润新知