我正在尝试解析一个巨大的XML CLOB数据以获取一些节点值。所以我在DBMS_XMLPARSER的帮助下编写了一个方法来检索节点的值,并且它工作正常。
FUNCTION Get_Node_Value(
node_ IN DBMS_XMLDOM.DOMNode) RETURN VARCHAR2
IS
sub_nodes_list_ DBMS_XMLDOM.DOMNodeList;
sub_nodes_len_ NUMBER;
value_node_ DBMS_XMLDOM.DOMNode;
value_ VARCHAR2(50);
BEGIN
sub_nodes_list_ := DBMS_XMLDOM.Getchildnodes(node_);
sub_nodes_len_ := DBMS_XMLDOM.GetLength(sub_nodes_list_); -- sub_nodes_len_ should be 1
IF ( sub_nodes_len_ > 0 ) THEN
value_node_ := DBMS_XMLDOM.Item(sub_nodes_list_, 0);
value_ := DBMS_XMLDOM.GetNodeValue(value_node_);
END IF;
RETURN value_;
END Get_Node_Value;
但我想知道有一个常见的方法,我将XML CLOB和节点名称作为参数,并获得返回的节点值或相关的东西。由于XML太大,使用这种方法将减少不必要的编码。任何帮助将不胜感激!
答案 0 :(得分:1)
Xquery是一个查询和"编程"旨在使用xml文档的语言。 Oracle有两个主要功能,它接受xquery命令。 xmltable和xmlquery。 usign xmltable and xmlquery
简短的例子。
select * from xmltable('/ROWSET/ROW/TABLE_NAME/text()' passing xmltype('<?xml version="1.0"?>
<ROWSET>
<ROW>
<TABLE_NAME>DBA_2PC_NEIGHBORS</TABLE_NAME>
<COMMENTS>information about incoming and outgoing connections for pending transactions</COMMENTS>
</ROW>
<ROW>
<TABLE_NAME>DBA_2PC_PENDING</TABLE_NAME>
<COMMENTS>info about distributed transactions awaiting recovery</COMMENTS>
</ROW>
<ROW>
<TABLE_NAME>DBA_ADDM_FDG_BREAKDOWN</TABLE_NAME>
</ROW>
</ROWSET>') )