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;
    

      

  • 相关阅读:
    129 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 03 饿汉模式 VS 懒汉模式 02 懒汉式的代码实现
    128 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 03 饿汉模式 VS 懒汉模式 01 饿汉式的代码实现
    127 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 02 单例模式概述 01 单例模式的定义和作用
    126 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 01 设计模式概述 01 设计模式简介
    125 01 Android 零基础入门 02 Java面向对象 05 Java继承(下)05 Java继承(下)总结 01 Java继承(下)知识点总结
    leetcode-----121. 买卖股票的最佳时机
    leetcode-----104. 二叉树的最大深度
    Json串的字段如果和类中字段不一致,如何映射、转换?
    Mybatis-Plus的Service方法使用 之 泛型方法default <V> List<V> listObjs(Function<? super Object, V> mapper)
    模糊查询
  • 原文地址:https://www.cnblogs.com/Jeffrey-xu/p/9448392.html
Copyright © 2011-2022 走看看