1
私は入力パラメータとしてXMLTypeを持つプロシージャを持っています。プロシージャに渡された動的XmlTypeパラメータからデータを選択したいと思います(プロシージャを呼び出すたびに動的平均ノード名が変わります) あなたは何をしているカーソルにデータoracleの動的xmlTypeをループする
私は入力パラメータとしてXMLTypeを持つプロシージャを持っています。プロシージャに渡された動的XmlTypeパラメータからデータを選択したいと思います(プロシージャを呼び出すたびに動的平均ノード名が変わります) あなたは何をしているカーソルにデータoracleの動的xmlTypeをループする
場合
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;
/
希望、これは少し
だけのオリジナルのすべてのノードではないですができますXML?どうか明らかにしてください。 – OldProgrammer
プロシージャを呼び出すたびにxmlTypeをノードに渡す必要があるすべてのデータをカーソルに置く – user2193009