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;
    

      

  • 相关阅读:
    ArcGIS for Android地图控件的5大常见操作
    adb开启不了解决方案
    Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤
    解决 Your project contains error(s),please fix them before running your application问题
    二路归并算法实现
    字符串全排列
    python连接MySQL
    .net常考面试题
    win7 web开发遇到的问题-由于权限不足而无法读取配置文件,无法访问请求的页面
    int.Parse()与int.TryParse()
  • 原文地址:https://www.cnblogs.com/Jeffrey-xu/p/9448392.html
Copyright © 2011-2022 走看看