zoukankan      html  css  js  c++  java
  • ORACLE解析JSON数据示例(使用事务级临时表:批量写入数据库)

    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;
    

      

  • 相关阅读:
    spark基于zookeeper的高可用异常启动分析
    cdh 系统配置文件更新 error parsing conf core-site.xml
    spark2.1消费kafka0.8的数据 Recevier && Direct
    spark2.3 消费kafka0.10数据
    hadoop3.x的HA解析
    nginx安装运维
    redhat7 升级openssh openssl
    kylin 密码错误
    Vray5 材质库 图灵炸裂版 (支持Vray3.x) + VMMP
    让3dmax第一次打开材质浏览器不要卡顿
  • 原文地址:https://www.cnblogs.com/Jeffrey-xu/p/9508429.html
Copyright © 2011-2022 走看看