我在oracle中对XML很新,我有一个非常简单的要求。
我有一个返回XMLTYPE数据的函数 e.g。
<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
如何在行之间添加换行符或添加空格。
我不想将数据保存在任何表格中。
答案 0 :(得分:3)
作为其中一种方法,您可以使用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
使用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
使用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