首页  >  文章  >  数据库  >  巧用xmltype解析clob数据

巧用xmltype解析clob数据

WBOY
WBOY原创
2016-06-07 16:50:351381浏览

对于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);
 


插入 aa 值(5,to_clob('
 
 
   
     
       
       
       
       
       
       
;RelatedObjectInfo objID="##PC4.0##119094" //>
       
       
       
        ;
       
       
       
       
       
       
       
       
       
       
       
     

   

 

 

    '));
 
来看看xmltype的结果,根据根节点,找到最终的叶子节点。  select extract(xmltype(c_cml),'/ObjectInfo/Relations/RelationInfo/RelatedObjects/RelatedObjectInfo') a,
     
    id
来自 aa 其中 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标记进行清楚。可以直接使用替换 SQL>选择替换(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>选择替换(替换(提取(xmltype(c_cml),'/ObjectInfo/Relations/RelationInfo/RelatedObjects/RelatedObjectInfo'),'',',') a,   
  2          id
  3          来自    aa,其中 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的数据格式也有一些限定的。

本文永久更新链接地址:

巧用xmltype解析clob数据

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn