我有一个XMLType作为输入参数的过程,我想从传递给Procedure的动态XmlType参数中选择Data并用Cursor填充它(每次调用Procedure时动态平均节点名称都会改变) 如果我知道节点名称,我可以使用以下代码选择节点:
sudo apt install bc
但我想选择xmlType中的所有节点,而不需要知道节点名称,而是将数据知道到Cursor
答案 0 :(得分:0)
如果您要查找的是获取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;
/
希望这有点帮助