Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle中的动态xmlType循环_Xml_Oracle_Loops - Fatal编程技术网

oracle中的动态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(

我有一个以XMLType作为输入参数的过程,我想从传递给该过程的动态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;
/