oracle怎么从大字段中取节点,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,字段值:“1張三17700000000410527999909099999”;
查詢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怎么从大字段中取节点,Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cad 打开硬件加速卡_CAD:“你的图
- 下一篇: [密码学基础][每个信息安全博士生应该知