zoukankan      html  css  js  c++  java
  • oracle 11g plsql解析json数据示例3(新)

    对于如下格式的Json数据,用下面的存储过程进行解析(存储过程中json path,即关键字需与json数据大小写保持一致):

    (注:'list'下是数组,包括多个款号,而每个款号下会有多个条码,所以对应条码的'LIST_PRODUCT_ALIAS'下为数组,包含多个条码信息)

    1:Json数据

    {
      "msg_no": "EA",
      "list": [{
        "ORIENTATION": "男款",
        "msg_no": "件",
        "LIST_PRODUCT_ALIAS": [{
          "SAP_ZZSTATUS": false,
          "RECKON_TYPE": "20服饰",
          "PROD_STATE": "A",
          "msg_no": "件",
          "table": "LIST_PRODUCT_ALIAS",
          "PROD_GRID": "3000225",
          "query_no": "2018080600000005",
          "SPEC": "00",
          "IS_SAP_MANAGE": true,
          "DESC_SPEC": "00",
          "DESC_COLOR": "银灰",
          "PROD_CLS_ID": "120901",
          "IS_SAMPLE": false,
          "COLOR": "30",
          "pK": "null"
        }, {
          "SAP_ZZSTATUS": false,
          "RECKON_TYPE": "20服饰",
          "PROD_STATE": "A",
          "msg_no": "件",
          "table": "LIST_PRODUCT_ALIAS",
          "PROD_GRID": "3000225",
          "query_no": "2018080600000005",
          "SPEC": "00",
          "IS_SAP_MANAGE": true,
          "DESC_SPEC": "00",
          "DESC_COLOR": "银灰",
          "PROD_CLS_ID": "120901",
          "IS_SAMPLE": false,
          "COLOR": "30",
          "pK": "null"
        }],
        "query_no": "2018080600000005",
        "PROD_ID": "120901",
        "PROD_YEAR": "2018",
        "BASIC_UOM": "件",
        "pK": "120901",
        "PROD_SEASON": "夏",
        "STATUS1": "A",
        "NAME": "120901测试",
        "ON_SALE_DATE": 1512748800000,--时间戳
        "ISSPESUPPLY": "2",
        "BRAND_ID": "MB",
        "table": "LIST_PRODUCT",
        "MODEL": "J903",
        "PLAN_BATCH": "3",
        "ISAGT": "2",
        "ON_BRAND_PRC": 29
      }]
      "query_no": "2018080600000005"
    }
    

      

    2:存储过程:

    CREATE OR REPLACE PROCEDURE list_productalias_read(p_json    IN CLOB,
                                                       p_code    OUT NUMBER,
                                                       p_message OUT VARCHAR2) AS
        ----------------------------------------------------------
        --author:xuyang
        --date:20180809
        --description:获取接口信息,解析并传入商品目录中间表
    
        ----------------------------------------------------------
        v_injson    json;
        v_bodylist  json_list; --款号json列表
        v_bodylist1 json_list; --条码json列表
        v_onejson   json; --用于解析每一个款号数据
        v_onejson1  json; --用于解析每一个条码数据
    
    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));
        
            INSERT INTO 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'));
        
            IF SQL%ROWCOUNT = 0 THEN
                p_message := p_message || 'product_code' ||
                             json_ext.get_string(v_onejson, 'prod_id') ||
                             'failed!!';
                CONTINUE;
            END IF;
        
            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 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'));
            
                IF SQL%ROWCOUNT = 0 THEN
                    p_message := p_message || 'product_alias_code:' ||
                                 json_ext.get_string(v_onejson1, 'PROD_CLS_ID') ||
                                 'failed!!';
                END IF;
            END LOOP;
        
        END LOOP;
    
        p_code := 0;
    
    END;
    

      

  • 相关阅读:
    最大子数组求和并进行条件组合覆盖测试
    Ubuntu 16.04 c++ Google框架单元测试
    The directory '/home/stone/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If execu
    Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
    个人博客作业三:微软小娜APP的案例分析
    补交 作业一
    补交 作业二:个人博客作业内容:需求分析
    嵌入式软件设计第12次实验报告
    嵌入式软件设计第11次实验报告
    嵌入式软件设计第10次实验报告
  • 原文地址:https://www.cnblogs.com/Jeffrey-xu/p/9448392.html
Copyright © 2011-2022 走看看