[英]Extract function in oracle with space
我在Oracle11g表CLOB中有一个COLUMN作为数据类型,其值如下:
<Nodes>
<Node NodeType="Start"/>
<Node NodeType="Node1"/>
<Node NodeType="Node2"/>
<Node NodeType="Node3"/>
<Node NodeType="Node4"/>
</Nodes>
当我如下运行查询
select EXTRACT(XMLTYPE(Node_XML), /Nodes/Node/@NodeType) from table_name where pk='key1';
StartNode1Node2Node3Node4
但我需要ouptut作为:
Start Node1 Node2 Node3 Node4
我需要一个空格(或任何定界符)才能在Java代码中使用查询。 oracle中是否还有其他功能可以实现此目的?
提前致谢
由于从11g起,不推荐使用EXTRACT
和EXTRACTVALUE
,因此听起来像是XMLTABLE
和LISTAGG
的工作:
with sample_data as (select 1 id, '<Nodes>
<Node NodeType="Start"/>
<Node NodeType="Node1"/>
<Node NodeType="Node2"/>
<Node NodeType="Node3"/>
<Node NodeType="Node4"/>
</Nodes>' xdata from dual)
select sd.id,
listagg(nodetype, ',') within group (order by x.id) nodes
from sample_data sd
cross join xmltable('/Nodes/Node'
passing xmltype(sd.xdata)
columns id for ordinality,
nodetype varchar2(10) path '@NodeType') x
group by sd.id;
ID NODES
---------- ----------------------------------------
1 Start,Node1,Node2,Node3,Node4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.