oracle中的动态xmlType循环
我有一个以XMLType作为输入参数的过程,我想从传递给该过程的动态XMLType参数中选择数据,并用游标填充它(每次调用该过程时,动态平均节点名称都会更改) 如果我知道节点名称,我可以使用以下代码选择节点:oracle中的动态xmlType循环,xml,oracle,loops,Xml,Oracle,Loops,我有一个以XMLType作为输入参数的过程,我想从传递给该过程的动态XMLType参数中选择数据,并用游标填充它(每次调用该过程时,动态平均节点名称都会更改) 如果我知道节点名称,我可以使用以下代码选择节点: SELECT extractvalue(column_value, '/row/id') "id",extractvalue(column_value, '/row/name') "name" FROM( TABLE(XMLSequence(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 ;
选择提取值(列值“/row/id”)
“id”,提取值(列值,/row/name')“名称”
FROM(表)XMLSequence(XMLTYPE('id1mm
提取('/root/row')))T;
但是我想选择xmlType中的所有节点,而不需要知道节点名称,而是将数据放入游标如果您想要的是获取xmlType中的所有元素(所有xml标记?),那么您可以使用 仅举一个简单的示例来说明逻辑(很可能还需要验证子元素等):
希望这能帮上一点忙。如果您想要的是获取xmltype中的所有元素(所有xml标记?),那么您可以使用 仅举一个简单的示例来说明逻辑(很可能还需要验证子元素等):
希望这有点帮助不是所有节点都是原始XML吗?请澄清。每次调用过程时,我都需要传递xmlType,不管它在哪个节点,将所有数据放在游标中,而不是所有节点都只是原始的XML?请澄清。每次调用该过程时,我都需要传递xmlType,无论它位于哪个节点,都要将所有数据放在游标中
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;
/