我有这样的clob数据:
我有两个GAIN AND PAY(可能更多三个,四个......)
<G_1>
<G><GAIN>14660</GAIN><PAY>0</PAY><Gc>1</Gc><S>1</S><D>0</D><K>0</K></G>
<G><GAIN>0</GAIN><PAY>0</PAY><T>0</T><S>0</S><M>0</M><W>1</W></G>
</G_1>
我想单独达到14660和0(GAIN)和0 s(付费)。我怎么能这样做?
答案 0 :(得分:3)
假设您的有效负载实际上是XML,并且<AL>0</GRUP_AL>
只是一个拼写错误,您可以使用这样的XPath查询:
select
xmlcast(
xmlquery('/G_1/G/GAIN' passing XMLTYPE(col1) returning content)
as NUMBER
) gain
, xmlcast(
xmlquery('/G_1/G/PAY' passing XMLTYPE(col1) returning content)
as NUMBER
) pay
from t69
/
因此,新的有效负载具有G/GAIN
和G/PAY
的多个实例。之前的解决方案产生了错误的答案,因为它将不同的实例连接成一个列。
对于这种情况,我们需要使用XMLTable(),如下所示:
select xr.*
from t69
, xmltable ('/G_1'
passing xmltype (t69.col1)
columns g_set XMLTYPE PATH 'G') xt
, xmltable( 'G'
passing xt.g_set
columns gain number path 'GAIN'
, pay number path 'PAY'
) xr
/
替代SQL Fiddle here。请注意,我们会为<G>
的实例获取NULL值,而不包含<GAIN>
或<PAY>
的元素。