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 。

 

完!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM