最近公司做的几个项目,都是通过EBS与外部系统的Web Service进行数据的交互,而调用Web Service的时候,我们所传送的数据,都是按照约定的XML格式来传递,所以EBS接收到数据之后,需要解析该XML数据。以下为此次项目中通过PLSQL解析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结构比较复杂,有多层结构,如果只是扁平的单行结构的话,则处理方法类似,且更加简单了。

转载请注明出处……

PLSQL读取XML的数据的更多相关文章

  1. C#读取xml节点数据方法小结

    本文实例总结了C#读取xml节点数据的方法.分享给大家供大家参考.具体如下: 第一种: 使用XPath XML的路径我配置在web.config 的appSettings节点下 <appSett ...

  2. 第一周:读取XML深度数据并将其重建为三维点云

    本周主要任务:学习PCL点云库,掌握利用PCL对点云处理的方法 任务时间:2014年9月1日-2014年9月7日 任务完成情况:完成了读取单幅xml深度数据,并重建三维点云并显示 任务涉及基本方法: ...

  3. JS读取XML文件数据并以table显示数据(兼容IE火狐)

    先看xml文件: <?xml version="1.0" standalone="yes"?> <student> <stuinf ...

  4. C# 递归读取XML菜单数据

    在博客园注册了有4年了,很遗憾至今仍未发表过博客,趁周末有空发表第一篇博客.小生不才,在此献丑了! 最近在研究一些关于C#的一些技术,纵观之前的开发项目的经验,做系统时显示系统菜单的功能总是喜欢把数据 ...

  5. JAVA读取XML文件数据

    XML文档内容如下: <?xml version="1.0" encoding="UTF-8"?> <root> <field t ...

  6. PHP读取XML文件数据

    XML文件 <?xml version="1.0" encoding="UTF-8"?> <node> <student> ...

  7. Python中如何读取xml的数据

    <?xml version="1.0" encoding="utf-8" ?> - <catalog> <maxid>4&l ...

  8. R语言XML格式数据导入与处理

    数据解析 XML是一种可扩展标记语言,它被设计用来传输和存储数据.XML是各种应用程序之间进行数据传输的最常用的工具.它与Access,Oracle和SQL Server等数据库不同,数据库提供了更强 ...

  9. jQuery、JS读取xml文件里的内容(JS先通过document.implementation.createDocument方法将xml转换成document对象,jQuery将读取到的xml转成table)

    xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...

随机推荐

  1. nodejs安装及环境配置

    简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O服务端Ja ...

  2. 利用SecondaryNameNode文件恢复Namenode-实践可行

    二. namenode故障恢复(importCheckpoint) *注意事项: (1) 为了便于将随便一台datanode临时用作namenode,datanode和namenode配置需要一模一样 ...

  3. about control %CPU

    #include <stdio.h> #include <unistd.h> #include <stdlib.h> #define timesize 200000 ...

  4. Android IOS WebRTC 音视频开发总结(六十)-- 您为什么招不到适合的音视频人才

    本文主要介绍音视频行业招聘现状,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com 有过音视频人才招聘经验的应该都深有 ...

  5. CentOS6.5_python2.7.3下virt-manager无法启动

    配置virt-manager: 1.安装virt-manager, libvirt, qemu-kvm 2.配置libvirtd开机启动: chkconfig libvirtd on   #取消开机启 ...

  6. 比特币钱包应用breadwallet源码

    breadwallet是一款安全.可靠和便捷的比特币钱包,可使用户免于恶意软件和其他应用中常见的安全问题的骚扰,充分利用了iOS提供的安全功能,包括AES硬件加密.app沙盒和数据保护.代码签名以及k ...

  7. s3c6410_u-boot-2010.03移植【续】

    本文接上一篇:http://www.cnblogs.com/tanghuimin0713/p/3965528.html 6.3)重新编译,烧写,运行 U-Boot - ::) for SMDK6410 ...

  8. JavaScript常用标签和方法总结

    什么是javascript?   (1) JavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的 脚本语言. (2) JavaScript是由Nets ...

  9. xode View 的封装

    1.Xcode自带头文件的路径 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Develo ...

  10. reader,字符流

    1. public class Demo1 { public static void main(String[] args) throws IOException { File file = new ...