zoukankan      html  css  js  c++  java
  • Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值

    参照: 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 。

    完!

  • 相关阅读:
    Linux 通过sendmail 发邮件到外部邮箱
    基于Ruby的Watir-WebDriver自动化测试方案
    高性能Linux服务器构建实战笔记
    Unix Linux 通用vi命令,使用帮助手册【珍藏版】
    软件测试人员必备Linux命令(初、中、高级)
    网络七层知多少,学以致用
    手机终端高级测试工程师经验总结
    临别前夕,工作总结 于2014年8月13日 终稿
    基于ruby的watir自动化测试 笔记二
    高级软件测试工程师笔试题
  • 原文地址:https://www.cnblogs.com/zcx-94/p/11913223.html
Copyright © 2011-2022 走看看