PL/SQL 解析 clob 数据
Posted
技术标签:
【中文标题】PL/SQL 解析 clob 数据【英文标题】:PL/SQL parse clob data 【发布时间】:2015-05-25 12:50:08 【问题描述】:我有一个这样的 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 (pay)。我该怎么做?
【问题讨论】:
您可以使用 INSTR 和 SUBSTR。 【参考方案1】:假设您的有效负载实际上是 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
/
查看the SQL Fiddle here。
因此,新的有效负载具有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。请注意,对于没有 <GAIN>
或 <PAY>
元素的 <G>
实例,我们会得到一个 NULL 值。
【讨论】:
这似乎是一个很好的解决方案,但我又有一个问题。如果我有两个 GAIN 和两个 PAY :以上是关于PL/SQL 解析 clob 数据的主要内容,如果未能解决你的问题,请参考以下文章
PL/SQL。使用 regexp_like 正则表达式解析 clob UTF8 字符
使用 PL/SQL 解析 XML 输出 html 中特定标签的内容