Oracle XMLTable和GETXMLTYPE-如何将XML转换为行?

Oracle XMLTable和GETXMLTYPE-如何将XML转换为行?,oracle,oracle11g,Oracle,Oracle11g,我有以下XML: <ROWSET> <ROW> <record_id>2</record_id> <catalog>Y</catalog> </ROW> </ROWSET> 基本上我想要: col_name, col_value record_id 2 catalog Y Oracle XMLDB完全支持。试试这个方法 with params as ( s

我有以下XML:

<ROWSET>
 <ROW>
    <record_id>2</record_id>
    <catalog>Y</catalog>
  </ROW>
</ROWSET>
基本上我想要:

col_name, col_value
record_id    2
catalog      Y

Oracle XMLDB完全支持。试试这个方法

with params as (
  select 
    xmltype('
      <ROWSET>
       <ROW>
          <record_id>2</record_id>
          <catalog>Y</catalog>
        </ROW>
      </ROWSET>
    ') p_xml
  from dual  
)    
select
  col_name, col_val
from
  XMLTable(
    '              
      for $i in $doc//descendant-or-self::*
        return <element>
                 <element_path> {$i/string-join(self::*/name(.), ''/'')} </element_path>
                 <element_content> {$i/text()}</element_content>
               </element> 
    '
    passing (select p_xml from params) as "doc"
    columns 
      col_name   varchar2(4000) path '//element_path',
      col_val   varchar2(4000) path '//element_content'
  )
where col_val is not null
with params as (
  select 
    xmltype('
      <ROWSET>
       <ROW>
          <record_id>2</record_id>
          <catalog>Y</catalog>
        </ROW>
      </ROWSET>
    ') p_xml
  from dual  
)    
select
  col_name, col_val
from
  XMLTable(
    '              
      for $i in $doc//descendant-or-self::*
        return <element>
                 <element_path> {$i/string-join(self::*/name(.), ''/'')} </element_path>
                 <element_content> {$i/text()}</element_content>
               </element> 
    '
    passing (select p_xml from params) as "doc"
    columns 
      col_name   varchar2(4000) path '//element_path',
      col_val   varchar2(4000) path '//element_content'
  )
where col_val is not null