zoukankan      html  css  js  c++  java
  • PLSQL读取XML的数据

    最近公司做的几个项目,都是通过EBS与外部系统的Web Service进行数据的交互,而调用Web Service的时候,我们所传送的数据,都是按照约定的XML格式来传递,所以EBS接收到数据之后,需要解析该XML数据。以下为此次项目中通过PLSQL解析XML数据的例子。

    假设约定的XML格式如下所示:

    XML结构

    此处为子库转移的数据,从A子库把某个物料转移到B子库,而由于物料启用批次的关系,在转移的时候,可能存在多个批次,所以XML结构也就有了层次结构。PLSQL代码如下所示:

    DECLARE
       l_xml xmltype;
      CURSOR cur_line(l_xml xmltype) IS
        SELECT TRIM(extractvalue(VALUE(l), 'LINES/LINE_ID')) LINE_ID
              ,TRIM(extractvalue(VALUE(l), 'LINES/SCHEDULE_ARRIVAL_DATE')) SCHEDULE_ARRIVAL_DATE
              ,TRIM(extractvalue(VALUE(l), 'LINES/SRC_SUBINVENTORY')) SRC_SUBINVENTORY
              ,TRIM(extractvalue(VALUE(l), 'LINES/DEST_SUBINVENTORY')) DEST_SUBINVENTORY
              ,TRIM(extractvalue(VALUE(l), 'LINES/COMMENTS')) COMMENTS
              ,TRIM(extractvalue(VALUE(l), 'LINES/TRANSACTION_TYPE_ID')) TRANSACTION_TYPE_ID
              ,TRIM(extractvalue(VALUE(l), 'LINES/TXN_ACTION_CODE')) TXN_ACTION_CODE
              ,TRIM(extractvalue(VALUE(l), 'LINES/INVENTORY_ITEM_ID')) INVENTORY_ITEM_ID
              ,TRIM(extractvalue(VALUE(l), 'LINES/REQUIRE_QTY')) REQUIRE_QTY
              ,TRIM(extractvalue(VALUE(l), 'LINES/ACTUAL_SHIP_QTY')) ACTUAL_SHIP_QTY
              ,TRIM(extractvalue(VALUE(l), 'LINES/TRANSACTION_DATE')) TRANSACTION_DATE
              ,TRIM(extractvalue(VALUE(l), 'LINES/CREATED_BY')) CREATED_BY
              ,TRIM(extractvalue(VALUE(l), 'LINES/CREATION_DATE')) CREATION_DATE
              ,extract(VALUE(l), 'LINES/DETAIL/LINE') lots
          FROM TABLE(xmlsequence(extract(l_xml, 'TRANSFER/LINES'))) l;

      CURSOR cur_lot(l_lot xmltype) IS
        SELECT TRIM(extractValue(VALUE(lot), 'LINE/LOT_NUMBER')) lot_number
              ,TRIM(extractValue(VALUE(lot), 'LINE/LOT_QTY')) lot_qty
              ,TRIM(extractValue(VALUE(lot), 'LINE/TRUCK_NO')) truck_no
              ,TRIM(extractValue(VALUE(lot), 'LINE/DRIVER_NAME')) driver_name
          FROM TABLE(xmlsequence(extract(l_lot, 'LINE'))) lot;

    BEGIN
      SELECT xmltype(p_request_data) INTO l_xml FROM dual;
      FOR x IN cur_line(l_xml) LOOP
        FOR y IN cur_lot(x.lots) LOOP
          NULL;
        END LOOP;
      END LOOP;
    END;

    此处代码无法直接运行,因为需要输入有参数没有定义,大概的使用方法就是上面所示。

    另外,此处是针对XML结构比较复杂,有多层结构,如果只是扁平的单行结构的话,则处理方法类似,且更加简单了。

    转载请注明出处……

  • 相关阅读:
    fmri降噪,利用spatial+temporal信息
    matlab中,计算,记录,程序运行,起始,结束 时间,间隔 &matlab中 tic,toc函数的用法
    第十五章 动态规划——矩阵链乘法
    第十五章 动态规划——钢条切割
    第十四章 数据结构的扩张
    第十四章 红黑树——C++代码实现
    第十三章 红黑树
    第十二章 二叉搜索树
    第十一章 散列表
    第十章 基本数据结构——二叉树
  • 原文地址:https://www.cnblogs.com/echochen/p/3557833.html
Copyright © 2011-2022 走看看