使用存储过程读取XML类型列

时间:2017-04-06 19:42:55

标签: oracle

如何使用存储过程从XML TYPE列显示父标记和属性?

示例:我在一个表中的XMLTYPE列中有以下数据:

<Employee>
  <Employee_information >    
  <Employee_content>
    <task>
      <Employee_stem>
        <Employee_stem_paragraph>fsdbnfjksdflsdj.</Employee_stem_paragraph>
        <Employee_stem_paragraph>dsfsdfsdfsdf</Employee_stem_paragraph>
      </Employee_stem>    
      <Employee_response>
        <Employee_response_choices>    
          <Employee_choice_list>
            <Employee_block_choice numeric_identifier="1">              
            <Employee_choice_paragraph>sdfsdfsdfsdf</Employee_choice_paragraph>
            </Employee_block_choice>    
          </Employee_choice_list>   
       </Employee_response_choices>    
</Employee>

输出:显示其中的所有父标记和属性。

输出示例:

  

员工,Employee_information,Employee_content,Employee_stem,Employee_stem_paragraph,Employee_response,Employee_response_choices,Employee_choice_list,Employee_block_choice,       numeric_identifier,Employee_choice_paragraph。

1 个答案:

答案 0 :(得分:0)

一般来说,你必须修复xml。所有标签都必须关闭。 1-select select //*/name(.) - 仅提取元素的名称。 2-en选择'//*/name(@*) - 仅提取属性'名称。

select *
  from xmltable('//*/name(.)'
                passing xmltype('<Employee>
  <Employee_information>
  <Employee_content>
    <task>
      <Employee_stem>
        <Employee_stem_paragraph>fsdbnfjksdflsdj.</Employee_stem_paragraph>
        <Employee_stem_paragraph>dsfsdfsdfsdf</Employee_stem_paragraph>
      </Employee_stem>    
      <Employee_response>
        <Employee_response_choices>    
          <Employee_choice_list>
            <Employee_block_choice numeric_identifier="1">              
            <Employee_choice_paragraph>sdfsdfsdfsdf</Employee_choice_paragraph>
            </Employee_block_choice>    
          </Employee_choice_list>   
       </Employee_response_choices>    
            </Employee_response>
            </task>
        </Employee_content>
      </Employee_information>    
</Employee>') columns name varchar2(200) path '.' )
union all 
select *
  from xmltable('//*/name(@*)'
                passing xmltype('<Employee>
  <Employee_information>
  <Employee_content>
    <task>
      <Employee_stem>
        <Employee_stem_paragraph>fsdbnfjksdflsdj.</Employee_stem_paragraph>
        <Employee_stem_paragraph>dsfsdfsdfsdf</Employee_stem_paragraph>
      </Employee_stem>    
      <Employee_response>
        <Employee_response_choices>    
          <Employee_choice_list>
            <Employee_block_choice numeric_identifier="1">              
            <Employee_choice_paragraph>sdfsdfsdfsdf</Employee_choice_paragraph>
            </Employee_block_choice>    
          </Employee_choice_list>   
       </Employee_response_choices>    
            </Employee_response>
            </task>
        </Employee_content>
      </Employee_information>    
</Employee>') columns name varchar2(200) path '.' )