--------------------------方法一-------------------------------------

1.xml字符串

/*

<orderlist>
        <order>
        <orderid>1</orderid>
        <ordernumber>857544544</ordernumber>
        <orderprice>54</orderprice>
        </order>
        
        <order>
        <orderid>2</orderid>
        <ordernumber>858544544</ordernumber>
        <orderprice>63</orderprice>
        </order>
        
        <order>
        <orderid>3</orderid>
        <ordernumber>454854555</ordernumber>
        <orderprice>781</orderprice>
        </order>        
</orderlist>

*/

2.oracle存储过程

CREATE OR REPLACE PROCEDURE p_xmlparse (p_xml   IN     CLOB,
                                                                     r_cur      OUT SYS_REFCURSOR)  
        AS  
           /***  
           xml格式<?xml version="1.0" encoding="utf-8"?>  
           <material id="101">  
               <attribute0>value0</attribute0>  
               <attribute1>value1</attribute1>  
               <attribute2>value2</attribute2>  
           </material>  
           ***/  
        -- xml解析器  
           xmlpar          xmlparser.parser := xmlparser.newparser;  
        -- dom文档对象  
           doc             xmldom.domdocument;  
           materialnodes   xmldom.domnodelist;  
           materialid      VARCHAR2 (50);  
           chilnodes       xmldom.domnodelist;  
           tempnode        xmldom.domnode;  
           temparrmap      xmldom.domnamednodemap;  
        -- 以下变量用于获取xml节点的值  
           v_attribute     VARCHAR2 (50);  
           v_value         VARCHAR2 (50);  
           tmp             INTEGER;  
           l_sql           VARCHAR2 (32767) := 'select ';  
        BEGIN  
           xmlparser.parseclob (xmlpar, p_xml);  
           doc := xmlparser.getdocument (xmlpar);  
        -- 释放解析器实例  
           xmlparser.freeparser (xmlpar);  
           materialnodes := xmldom.getelementsbytagname (doc, 'material');  
           tempnode := xmldom.item (materialnodes, 0);  
        -- 获取根元素的ID属性值  
           materialid := xmldom.getattribute (xmldom.getdocumentelement (doc), 'id');  
        -- 所有属性  
           temparrmap := xmldom.getattributes (tempnode);  
        -- 获取子元素的值  
           chilnodes := xmldom.getchildnodes (tempnode);  
           tmp := xmldom.getlength (chilnodes);  
           l_sql := l_sql || materialid || ' as materialid';  
        FOR i IN 0 .. tmp - 1  
           LOOP  
              v_attribute := xmldom.getnodename (xmldom.item (chilnodes, i));  
              v_value :=  
                 xmldom.getnodevalue (  
                    xmldom.getfirstchild (xmldom.item (chilnodes, i)));  
              l_sql := l_sql || ',''' || v_value || ''' as ' || v_attribute;  
        -- dbms_output.put_line(materialid||' '||v_attribute||' '||v_value);  
        END LOOP;  
           l_sql := l_sql || ' from dual';  
        -- DBMS_OUTPUT.put_line (l_sql);  
        OPEN r_cur FOR l_sql;  
        -- 释放文档对象  
           xmldom.freedocument (doc);  
        EXCEPTION  
        WHEN OTHERS  
        THEN  
              DBMS_OUTPUT.put_line (SQLERRM);  
        END p_xmlparse;

3.执行结果

源文档地址:http://blog.csdn.net/wzy0623/article/details/8245062

--------------------------方法二-------------------------------------

SELECT * FROM XMLTABLE('$B/DEAL_BASIC/USER_DEAL_INFO' PASSING
    XMLTYPE('<?xml version="1.0" encoding="gb2312" ?>&xml') AS B
    COLUMNS USER_DEAL_ID VARCHAR2(50) PATH
    '/USER_DEAL_INFO/USER_DEAL_ID',
    DEAL_INURE_TIME VARCHAR2(50) PATH
    '/USER_DEAL_INFO/DEAL_INURE_TIME',
    DEAL_EXPIRE_TIME VARCHAR2(50) PATH
    '/USER_DEAL_INFO/DEAL_EXPIRE_TIME',
    DEAL_CREATE_TIME VARCHAR2(50) PATH
    '/USER_DEAL_INFO/DEAL_CREATE_TIME')

xml字符串以传入参数的方式 输入

<DEAL_BASIC>
   <USER_DEAL_INFO>
   <USER_DEAL_ID>1000100001</USER_DEAL_ID>
   <DEAL_INURE_TIME>20081130</DEAL_INURE_TIME>
   <DEAL_EXPIRE_TIME>30000101</DEAL_EXPIRE_TIME>
   <DEAL_CREATE_TIME>20081130</DEAL_CREATE_TIME>
   </USER_DEAL_INFO>   
   <USER_DEAL_INFO>
   <USER_DEAL_ID>1000100002</USER_DEAL_ID>
   <DEAL_INURE_TIME>20081131</DEAL_INURE_TIME>
   <DEAL_EXPIRE_TIME>30000102</DEAL_EXPIRE_TIME>
   <DEAL_CREATE_TIME>20081131</DEAL_CREATE_TIME>
   </USER_DEAL_INFO>
     <USER_DEAL_INFO>
   <USER_DEAL_ID>1000100002</USER_DEAL_ID>
   <DEAL_INURE_TIME>20081131</DEAL_INURE_TIME>
   <DEAL_EXPIRE_TIME>30000102</DEAL_EXPIRE_TIME>
   <DEAL_CREATE_TIME>20081131</DEAL_CREATE_TIME>
   </USER_DEAL_INFO>
</DEAL_BASIC>

输出结果

ORACLE 解析xml字符串-转载的的更多相关文章

  1. oracle解析xml完成版第二次修改

    其实XML字符串就好像是ORACLE中的外部表,因此Oracle对 解析XML字符串一些规则要求非常严格.XML字符串提供的数据就是一张表,所以Oracle必须提供跟 xml数据一致的列头 示例一 S ...

  2. tinyXml直接解析XML字符串

    一直都用tinyxml直接LoadFile来解析XML,发现原来也可以直接解析XML字符串. XML文件: <?xml version=\"1.0\" encoding=\& ...

  3. Oracle解析 xml 记录一下(未完待续)

    Oracle解析 xml 记录一下. SQL> desc xmlparser; PROCEDURE FREEPARSER Argument Name                  Type  ...

  4. 解析xml字符串时报“前言中不允许有内容”错误。

    一,问题出现经过: j基于java语言webservic服务端接收客户端 传来的xml字符串用 解析时总报:org.dom4j.DocumentException: Error on line 1 o ...

  5. dom4j解析xml字符串实例

    DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...

  6. java解析xml字符串(用dom4j)

    package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...

  7. java解析xml字符串为实体(dom4j解析)

    package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...

  8. .NET解析xml字符串,通过反射给实体类对象赋值,获取实体类数据列表

    /// <summary> /// 解析xml字符串 转换为实体类列表数据 /// </summary> /// <param name="xmlStr&quo ...

  9. C++解析XML字符串

    项目交互遇到了需要VC++中解析XML字符串,故花了点时间了解了下VC++中解析XML的诸多方法主要包括三种:msxml(微软提供).markup.TinyXml. 开始花了点时间使用msxml3,虽 ...

随机推荐

  1. JS实现点击按钮,自增输入框个数

    <html> <head> <script language="javascript"> var i=0; function addinput( ...

  2. Spring的OpenEntityManagerInViewFilter

    在Java Web项目中使用Hibernate经常会遇到LazyInitializationException .这是因为controller和model层(java代码)将通过JPA的一些启用了延迟 ...

  3. Gvim一些基本配置

    介绍一些关于Gvim(windows 7 32位 Vim 7.4)的基本配置,除了特别说明,代码一律添加在安装目录下的_vimrc文件中. 1.取消自动备份,这行代码需要添加在 _vimrc文件中的b ...

  4. ZKW费用流修正

    #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #inc ...

  5. POJ 3694 Network(无向图求桥+重边处理+LCA)

    题目大意: 给你一个无向图,然后再给你一个Q代表有Q次询问,每一次加一条边之后还有几座桥.在这里要对重边进行处理. 每次加入一条边之后,在这条搜索树上两个点的公共祖先都上所有点的桥都没了. 这里重边的 ...

  6. 主席树:POJ2104 K-th Number (主席树模板题)

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 44952   Accepted: 14951 Ca ...

  7. 【拓扑】【宽搜】CSU 1084 有向无环图 (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 题目大意: 一个有向无环图(DAG),有N个点M条有向边(N,M<=105 ...

  8. #345 div2 D. Image Preview

    Vasya's telephone contains n photos. Photo number 1 is currently opened on the phone. It is allowed ...

  9. C#序列化和反序列化

    序列化和反序列化 序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得. 序列化分为两大部分:序列化和反序列化.序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在 ...

  10. Java内存管理以及各个内存区域详解

    一.概述 原文链接:http://blog.csdn.net/l271640625/article/details/39761439 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若 ...