oracle怎么从大字段中取节点,Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值...
參照: Oracle存儲(chǔ)過程中使用游標(biāo)來(lái)批量解析CLOB字段里面的xml字符串
背景:在寫存儲(chǔ)過程時(shí),需要獲取表單提交的信息。表單信息是以xml格式的字符串存儲(chǔ)在colb類型的字段dataxml中,如何獲取呢?參考百度內(nèi)容,寫一個(gè)function(函數(shù)),參數(shù)有xml格式字符串(dataxml值)和指定節(jié)點(diǎn)(nodeName),返回指定節(jié)點(diǎn)的值(nodeValue)。
編碼實(shí)現(xiàn):
--get_xml_nodeValue實(shí)現(xiàn) start
CREATE OR REPLACE FUNCTION get_xml_nodeValue(xmlStr CLOB, nodeName VARCHAR2) RETURN VARCHAR2 IS
--創(chuàng)建xml解析器實(shí)例xmlparser.Parser
xmlPar xmlparser.Parser := xmlparser.newParser;
--定義DOM文檔
xDoc xmldom.DOMDocument;
--定義item子節(jié)點(diǎn)數(shù)目變量
lenItme INTEGER;
--定義節(jié)點(diǎn)列表,存放item節(jié)點(diǎn)們
itemNodes xmldom.DOMNodeList;
--定義節(jié)點(diǎn),存放單個(gè)item節(jié)點(diǎn)
itemNode xmldom.DOMNode;
valueReturn VARCHAR2 (100);
BEGIN
--解析xmlStr中xml字符串,并存放到xmlPar中
xmlparser.parseClob(xmlPar, xmlStr);
--將xmlPar中的數(shù)據(jù)轉(zhuǎn)存到dom文檔中
xDoc := xmlparser.getDocument(xmlPar);
--釋放解析器實(shí)例
xmlparser.freeParser(xmlPar);
--獲取所有item節(jié)點(diǎn)
itemNodes := xmldom.getElementsByTagName(xDoc, nodeName);
--獲取item節(jié)點(diǎn)的個(gè)數(shù)
lenItme := xmldom.getLength(itemNodes);
--如果無(wú)該標(biāo)簽,則返回EMPTY
IF lenItme = 0 THEN
valueReturn := '';
ELSE
--獲取節(jié)點(diǎn)列表中的第1個(gè)item節(jié)點(diǎn)
itemNode := xmldom.item (itemNodes, 0);
--獲取所有子節(jié)點(diǎn)的值
valueReturn := xmldom.getNodeValue(xmldom.getFirstChild (itemNode));
END IF;
--釋放dom
xmldom.freeDocument(xDoc);
RETURN valueReturn;
END get_xml_nodeValue;
--get_xml_nodeValue實(shí)現(xiàn) end
調(diào)用測(cè)試:
表:FORM_DATA;
字段:DATAXML,字段值:“1張三17700000000410527999909099999”;
查詢1:select get_xml_nodeValue(f.dataxml, 'name') from form_data f; 結(jié)果:張三 ;
查詢2:select get_xml_nodeValue(f.dataxml, 'phone') from form_data f; 結(jié)果:17700000000 ;
查詢3:select get_xml_nodeValue(f.dataxml, 'id_number') from form_data f; 結(jié)果:410527999909099999 。
完!
總結(jié)
以上是生活随笔為你收集整理的oracle怎么从大字段中取节点,Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cad 打开硬件加速卡_CAD:“你的图
- 下一篇: [密码学基础][每个信息安全博士生应该知