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 。
完!
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号