2016-06-15 3 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에 있기 때문에 PL/SQL 코드에서 Xquery를 사용하는 것이 어려워 보입니다! 오류는 "XML 구문 분석 실패"와 같은 제안입니까? –

+0

어떻게 clob을 xmltype로 변환하려고합니까? –

+0

실제로 XML이므로 BLOB이므로 DBMS_LOB.converttoclob 메소드를 사용하여 CLOB로 변환합니다. 그런 다음 DBMS_XMLPARSER.parseclob() 및 DBMS_XMLPARSER.getDocument() 메서드를 사용하여 DBMS_XMLDOM.DOMDocument를 만듭니다. 그 후에는 DBMS_XMLDOM 패키지를 사용하여 XML을 구문 분석하고 노드 값을 검색합니다. –

관련 문제