2017-11-12 8 views
1

私は入力パラメータとしてXMLTypeを持つプロシージャを持っています。プロシージャに渡された動的XmlTypeパラメータからデータを選択したいと思います(プロシージャを呼び出すたびに動的平均ノード名が変わります) あなたは何をしているカーソルにデータoracleの動的xmlTypeをループする

+0

だけのオリジナルのすべてのノードではないですができますXML?どうか明らかにしてください。 – OldProgrammer

+0

プロシージャを呼び出すたびにxmlTypeをノードに渡す必要があるすべてのデータをカーソルに置く – user2193009

答えて

0

場合

 SELECT extractvalue(column_value, '/row/id') 
    "id",extractvalue(column_value, '/row/name') "name" 
    FROM(TABLE(XMLSequence(XMLTYPE('<root><row><id>id1</id><name>mm</name> 
    </row></root>').extract('/root/row'))))T ; 

しかし、私は、ノードの名前を知らなくても、XMLタイプのすべてのノードを選択すると、しかし:私は次のコードを使用してノード名を知っていれば、ノードを選択することができます探しているのは、xmltype(すべてのxmlタグ?)のすべての要素を取得することです。DBMS_XMLDOM package

ロジックを表示するだけの簡単な例(おそらくあなたも子要素とそのように検証する必要があります):

DECLARE 
    xml_record  XMLType; 
    cntElements  integer; 
    doc    dbms_xmldom.DOMDocument; 
    tagList   dbms_xmldom.DOMNodeList; 
    tag    dbms_xmldom.DOMNode; 

BEGIN 

-- !!! xmltype record from a test table with one record !!!; 
    select * into xml_record from xmltypes_test; 

    -- get xml elements/tags 
    doc  := dbms_xmldom.newDOMDocument(xml_record); 
    tagList := dbms_xmldom.getElementsByTagName(doc,'*'); 

    -- count tags 
    cntElements:= dbms_xmldom.getlength(tagList); 

    -- loop over tags 
    FOR i IN 0 .. cntElements - 1 
    LOOP 
     tag := dbms_xmldom.item(tagList, i); 
     DBMS_OUTPUT.put_line('Element ' || i || ' name: ' || dbms_xmldom.getnodename(tag)); 

    END LOOP; 

END; 
/

希望、これは少し

関連する問題