2016-06-15 2 views
1

Я пытаюсь разобрать огромные данные XML CLOB, чтобы получить некоторые значения узлов. Поэтому я написал метод с помощью DBMS_XMLPARSER для получения значения узла, и он отлично работает.Как анализировать данные Oracle CLOB XML для получения значения узла?

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 слишком велик, использование такого метода сократит ненужное кодирование. Любая помощь будет оценена!

ответ

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>')) 
+0

Спасибо. Поскольку у меня есть XML-сообщение в BLOB, кажется сложным использовать Xquery в PL/SQL-коде! ошибки похожи на «разбор синтаксиса XML» на любые предложения? –

+0

Как вы пытаетесь преобразовать clob в xmltype? –

+0

Фактически XML это BLOB, поэтому я конвертирую его в CLOB с помощью метода DBMS_LOB.converttoclob. Затем с помощью методов DBMS_XMLPARSER.parseclob() и DBMS_XMLPARSER.getDocument() создайте DBMS_XMLDOM.DOMDocument. После этого только я использую пакет DBMS_XMLDOM для синтаксического анализа XML и получения значения узла. –

Смежные вопросы