视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
巧用xmltype解析clob数据
2020-11-09 12:32:54 责编:小采
文档


对于clob的数据,很多场合中都使用xml的格式,但是对于数据的查取和处理总是感觉力不从心。在条件允许的情况下,如果能够巧妙的使

对于clob的数据,很多场合中都使用xml的格式,但是对于数据的查取和处理总是感觉力不从心。在条件允许的情况下,如果能够巧妙的使用xmltype来做数据处理,无意中是对于clob的一个处理利器。
简单说下需求。
数据库里存放的clob类似下面的格式






























现在有一个需求是能够把RelatedObjectInfo 中的objID查取,整理后得到一个以逗号分隔的串。
比如上面的clob数据,需要输出成为下面的形式:
##PC4.0##118146,##PC4.0##30369,##PC4.0##118145,##PC4.0##118211,##PC4.0##117696,##PC4.0##119094,##PC45.0##118203,

如果直接通过sql语句来写,确实很难实现,,如果通过Pl/sql也需要做不少的工作。
下面尝试使用xmltype来直接读取clob数据。
简单创建一个测试表,插入数据。
create table AA(id number,c_cml clob);


insert into aa values(5,to_clob('





























'));

来看看xmltype的效果,根据根节点,找到最终的叶子节点。
select extract(xmltype(c_cml),'/ObjectInfo/Relations/RelationInfo/RelatedObjects/RelatedObjectInfo') a,
id
from aa where id=5;

A ID
---------------------------------------------------------------------------------------------------- --------
tInfo objID="##PC4.0##118145"/> "##PC4.0##117696"/> tedObjectInfo objID="##PC4.0##118583"/> objID="##PC4.0##30310"/> elatedObjectInfo objID="##PC4.0##30318"/> nfo objID="##PC4.0##30309"/>

可以看到已经查到了这部分的数据。

更进一步,把xml标记进行清除。可以直接使用replace
SQL> select replace(extract(xmltype(c_cml),'/ObjectInfo/Relations/RelationInfo/RelatedObjects/RelatedObjectInfo'),'##PC4.0##30369"/>##PC4.0##118145"/>##PC4.0##118211"/>##PC4.0##117696"/>##PC4.0##11 5
9094"/>##PC4.0##118203"/>##PC4.0##118133"/>##PC4.0##118135"/>##PC4.0##118583"/>##PC4.0##30313"/>##PC
4.0##30310"/>##PC4.0##110154"/>##PC4.0##30317"/>##PC4.0##30314"/>##PC4.0##30315"/>##PC4.0##30318"/>#
#PC4.0##118131"/>##PC4.0##30309"/>##PC4.0##118160"/>##PC4.0##119101"/>

然后直接清除尾部标记。
SQL> select replace(replace(extract(xmltype(c_cml),'/ObjectInfo/Relations/RelationInfo/RelatedObjects/RelatedObjectInfo'),'',',') a,
2 id
3 from aa where id=5;

A ID
---------------------------------------------------------------------------------------------------- --------
##PC4.0##118146,##PC4.0##30369,##PC4.0##118145,##PC4.0##118211,##PC4.0##117696,##PC4.0##119094,##PC4 5
.0##118203,##PC4.0##118133,##PC4.0##118135,##PC4.0##118583,##PC4.0##30313,##PC4.0##30310,##PC4.0##11
0154,##PC4.0##30317,##PC4.0##30314,##PC4.0##30315,##PC4.0##30318,##PC4.0##118131,##PC4.0##30309,##PC
4.0##118160,##PC4.0##119101,

这样就能很快实现需求,把clob的数据当做xml来做处理,当然了对于clob的数据格式也是有一些限定的。

本文永久更新链接地址:

下载本文
显示全文
专题