【问题标题】:Formatting the data of xmltype in oracle在oracle中格式化xmltype的数据
【发布时间】:2013-08-03 19:17:48
【问题描述】:

我对 oracle 中的 XML 很陌生,我有一个非常简单的要求。

我有一个返回 XMLTYPE 数据的函数 例如

<ROWSET>
 <ROW>
  <RCODE>FIRST CHECK DATA</RCODE>
 </ROW>
 <ROW>
  <RCODE>SECOND CHECK DATA</RCODE>
 </ROW>
 <ROW>
  <RCODE>THIRD CHECK DATA</RCODE>
 </ROW>
</ROWSET>

我想避开所有的标签,以正常的方式显示数据。 我试过了

DECLARE
l_xmltype XMLTYPE;
l_var VARCHAR2(1000);

BEGIN
l_xmltype := getdata(849,20130804);                   

l_var := l_xmltype.extract('*/ROW/RCODE/text()').getstringval();   
END;

OUTPUT:

FIRST CHECK DATASECOND CHECK DATAJOHNSON KOUL

我想显示的一样

FIRST CHECK DATA

SECOND CHECK DATA

THIRD CHECK DATA

如何在行之间提供换行符或添加空格。

我不想将数据保存在任何表格中。

【问题讨论】:

    标签: oracle oracle11g xmltype


    【解决方案1】:

    作为其中一种方法,您可以使用XMLSequence() 函数,它返回顶级节点的集合,然后应用extractvalue() 来获取实际的节点值。作为另一种方法,也是更可取的方法(从 oracle 11gr2 开始,XMLSequence() 已被弃用),您可以使用XMLTable() 函数:

    这是一个简单的函数,它返回XMLType数据类型的数据:

    SQL> create or replace function GetXML return xmltype
      2  is
      3  begin
      4    return xmltype('<ROWSET>
      5                      <ROW>
      6                        <RCODE>FIRST CHECK DATA</RCODE>
      7                      </ROW>
      8                      <ROW>
      9                        <RCODE>SECOND CHECK DATA</RCODE>
     10                      </ROW>
     11                      <ROW>
     12                        <RCODE>THIRD CHECK DATA</RCODE>
     13                      </ROW>
     14                    </ROWSET>');
     15  end;
     16  /
    
    Function created  
    
    1. 使用XMLSequence()

      select extractvalue(column_value, '/RCODE') as rcode
        from table(
                   xmlsequence(
                               extract(getxml, '/ROWSET/ROW/RCODE')
                              )
                   )
      

      结果:

      RCODE
      --------------------
      FIRST CHECK DATA
      SECOND CHECK DATA
      THIRD CHECK DATA
      
    2. 使用XMLTable()

      select Rcode
        from xmltable('/ROWSET/ROW/RCODE'
                        passing getxml columns Rcode varchar2(21) path '/RCODE')
      

      结果:

       RCODE
       ---------------------
       FIRST CHECK DATA
       SECOND CHECK DATA
       THIRD CHECK DATA
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-26
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多