巧用xmltype解析clob資料
對於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"/>
可以看到已經查到了<RelatedObjectInfo>這部分的資料。
更進一步,把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的資料格式也是有一些限定的。
簡單說下需求。
資料庫裡存放的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);
'));
來看看xmltype的效果,根據根節點,找到最終的葉子節點。
select extract(xmltype(c_cml),'/ObjectInfo/Relations/RelationInfo/RelatedObjects/RelatedObjectInfo') a,
id
from aa where id=5;
A ID
---------------------------------------------------------------------------------------------------- --------
可以看到已經查到了<RelatedObjectInfo>這部分的資料。
更進一步,把xml標記進行清除。可以直接使用replace
SQL> select replace(extract(xmltype(c_cml),'/ObjectInfo/Relations/RelationInfo/RelatedObjects/RelatedObjectInfo'),'
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'),'
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,
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1347098/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JDBC 處理CLob和Blob型別資料JDBC型別
- 資料採集之:巧用布隆過濾器提取資料摘要過濾器
- 巧用Proxyman Scripting 進行資料分類檢測
- 資料解析
- 如何快速將資料用逗號隔開——巧用EXCELExcel
- 巧用天翼雲盤備份雲主機資料
- Redis 實戰篇:巧用資料型別實現億級資料統計Redis資料型別
- [20180416]clob的插入.txt
- 如何寫出高效能程式碼(二)巧用資料特性
- Godot 解析資料Go
- datatable資料解析
- 簡單介紹2種Java讀取Oracle大欄位資料(CLOB)的方法JavaOracle
- GEOJSON資料格式解析JSON
- Flutter 之資料解析Flutter
- 解析大資料json大資料JSON
- 7.82 EMPTY_BLOB, EMPTY_CLOB
- 關於Oracle的BLOB和CLOBOracle
- Redis 實戰篇:巧用Bitmap 實現億級海量資料統計Redis
- 巧用ReduxRedux
- 大資料概念:史上最全大資料解析大資料
- Python中解析json資料PythonJSON
- day9資料解析
- 使用JSONPath解析JSON資料JSON
- Flutter資料解析Map格式Flutter
- 商業創新奇才,巧用大資料分析帶你穿越古代當首富大資料
- 如何解析 Ethereum 資料:讀取 LevelDB 資料
- 如何全面解析資料並創造資料故事
- Cephfs資料池資料物件命名規則解析物件
- 巧用 TypeScript(二)TypeScript
- 巧用 TypeScript(三)TypeScript
- 巧用 TypeScript(四)TypeScript
- 巧用 TypeScript (一)TypeScript
- 巧用標誌欄位實現填報資料的暫存與鎖定
- 解析資料踩過的坑
- ORACLE 資料塊格式深入解析Oracle
- 寶付大資料分析解析大資料
- Go - 如何解析 JSON 資料?GoJSON
- python解析c型別資料Python型別
- Oracle DBLink中CLOB報錯ORA-22992Oracle