在oracle中循环遍历动态xmlType

时间:2017-11-12 13:56:57

标签: xml oracle loops

我有一个XMLType作为输入参数的过程,我想从传递给Procedure的动态XmlType参数中选择Data并用Cursor填充它(每次调用Procedure时动态平均节点名称都会改变) 如果我知道节点名称,我可以使用以下代码选择节点:

sudo apt install bc

但我想选择xmlType中的所有节点,而不需要知道节点名称,而是将数据知道到Cursor

1 个答案:

答案 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;
/

希望这有点帮助