参照: Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串

  背景:在写存储过程时,需要获取表单提交的信息。表单信息是以xml格式的字符串存储在colb类型的字段dataxml中,如何获取呢?参考百度内容,写一个function(函数),参数有xml格式字符串(dataxml值)和指定节点(nodeName),返回指定节点的值(nodeValue)。

  编码实现

--get_xml_nodeValue实现 start

CREATE OR REPLACE FUNCTION get_xml_nodeValue(xmlStr CLOB, nodeName VARCHAR2) RETURN VARCHAR2 IS

  --创建xml解析器实例xmlparser.Parser
  xmlPar xmlparser.Parser := xmlparser.newParser;

  --定义DOM文档
  xDoc xmldom.DOMDocument;

  --定义item子节点数目变量
  lenItme INTEGER;

  --定义节点列表,存放item节点们
  itemNodes xmldom.DOMNodeList;

  --定义节点,存放单个item节点
  itemNode xmldom.DOMNode;

  valueReturn VARCHAR2 (100);

BEGIN

  --解析xmlStr中xml字符串,并存放到xmlPar中
  xmlparser.parseClob(xmlPar, xmlStr);

  --将xmlPar中的数据转存到dom文档中
  xDoc := xmlparser.getDocument(xmlPar);

  --释放解析器实例
  xmlparser.freeParser(xmlPar);

  --获取所有item节点
  itemNodes := xmldom.getElementsByTagName(xDoc, nodeName);

  --获取item节点的个数
  lenItme := xmldom.getLength(itemNodes);

  --如果无该标签,则返回EMPTY
  IF lenItme = 0 THEN

    valueReturn := '';

  ELSE

    --获取节点列表中的第1个item节点
    itemNode := xmldom.item (itemNodes, 0);

    --获取所有子节点的值
    valueReturn := xmldom.getNodeValue(xmldom.getFirstChild (itemNode));

  END IF;

  --释放dom
  xmldom.freeDocument(xDoc);

  RETURN valueReturn;

END get_xml_nodeValue;

--get_xml_nodeValue实现 end

  调用测试

  表:FORM_DATA;

  字段:DATAXML,字段值:“<data><id>1</id><name>张三</name><phone>17700000000</phone><id_number>410527999909099999</id_number></data>”;

  查询1:select get_xml_nodeValue(f.dataxml, 'name') from form_data f; 结果:张三 ;

  查询2:select get_xml_nodeValue(f.dataxml, 'phone') from form_data f; 结果:17700000000 ;

  查询3:select get_xml_nodeValue(f.dataxml, 'id_number') from form_data f; 结果:410527999909099999 。

完!

Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值的更多相关文章

  1. (转载)读取xml中的指定节点的值

            /// <summary>         /// 读取xml中的指定节点的值        /// </summary>         private st ...

  2. 读取xml中的指定节点的值

    /// <summary> /// 读取xml中的指定节点的值 /// </summary> private string ReadXmlNode(string filenam ...

  3. oracle数据库中将clob字段内容利用java提取出至文本文档中

    代码段: 1.执行clob转String public static String ClobToString(Clob sc) throws SQLException, IOException { S ...

  4. C#XML格式字符串取节点数据

    XML格式的字符串: <xml><return_code><![CDATA[{0}]]></return_code><return_msg> ...

  5. 读取XML文件的指定节点的值 并转换为Item

    cmb_State_Send.ItemsSource = null; XmlDocument doc = new XmlDocument(); doc.Load("D:\\模板\\Works ...

  6. oracle数据库对date字段类型存在空值进行排序的处理方法

    oracle数据库对date字段类型存在空值进行排序的处理方法      oracle 数据库,如果表中有一个字段类型为date,且该字段类型存在空值,并且需要排序,     解决方法为使用oracl ...

  7. c# winform 操作oracle数据库的Blob字段,把图片存储到数据库,保存图片到数据库

    ///c# winform 操作oracle数据库的Blob字段,把图片存储到数据库,保存图片到数据库 闲话不多说,直接上代码 using System; using System.Collectio ...

  8. Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)

    Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项) A.cat B.concat C.join D.+ 解答:B

  9. C# 将XML格式字符串,写入数据集的表中 XML解析

    将XML格式字符串,写入数据集的表1中   命名空间:using System.Xml;               string strRead;//strRead为以下xml值           ...

随机推荐

  1. LeetCode初级算法--设计问题02:最小栈

    LeetCode初级算法--设计问题02:最小栈 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...

  2. MyBatis 概念

    简介 什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyB ...

  3. 解决js计算0.1+0.2 !==0.3

    经常做用js数据运算的同学应该了解,在js中,0.1+0.2不会等于0.3,而是等于: 我一开始发现这个bug的时候也觉得很奇怪,那怎么去解决这个bug,让0.1+0.2 最后能得到0.3呢? 方法一 ...

  4. C++ 11标准

    C++11,也称为C++0x.为目前C++编程语言的最新正式标准(ISO/IEC 14882:2011).它将取代第二版标准ISO/IEC 14882:2003(第一版ISO/IEC 14882:19 ...

  5. React Ref 和 React forwardRef

    Ref 和Dom,Ref是reference(引用)的简写. 能力:大多数情况下,props前递可以解决一切问题,但是依然有需要触达React实例或者Dom节点的情况,这时候应该使用React Ref ...

  6. C#控件的简单应用

    listview 创建columns: ImageList imgList = new ImageList(); imgList.ImageSize = , ); FaceListview.Small ...

  7. video1

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 23 个重难点突破,带你吃透 Service 知识点「长达 1W+ 字」

    前言 学 Android 有一段时间了,想必不少人也和我一样,平时经常东学西凑,感觉知识点有些凌乱难成体系.所以趁着这几天忙里偷闲,把学的东西归纳下,捋捋思路. 这篇文章主要针对 Service 相关 ...

  9. SpringBoot与MybatisPlus3.X整合之动态表名 SQL 解析器(七)

    pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...

  10. 聊一聊Java中的各种运算符

    计算机之所以叫“计算机”,其最基本用途之一就是运算,对应刚刚接触Java的小伙伴而言,熟悉并掌握Java中的各种运算符及其在表达式中的运算优先级是十分必要的. 算术运算 算术运算主要用来处理数学中的加 ...