可以處理LOB欄位的常用字元函式
以前處理LOB欄位都是使用DBMS_LOB包,最近看了文件才發現,原來很多常用的字元函式都是支援LOB欄位的。
建立一個測試表:
SQL> CREATE TABLE T_LOB (ID NUMBER, CONTENTS CLOB);
Table created.
SQL> DECLARE
2 V_LOB CLOB;
3 BEGIN
4 INSERT INTO T_LOB
5 VALUES (1, EMPTY_CLOB())
6 RETURN CONTENTS INTO V_LOB;
7 FOR I IN 1..100 LOOP
8 DBMS_LOB.WRITEAPPEND(V_LOB, 32767, LPAD('A', 32767, 'A'));
9 END LOOP;
10 END;
11 /
PL/SQL procedure successfully completed.
SQL> SELECT ID, DBMS_LOB.GETLENGTH(CONTENTS) FROM T_LOB;
ID DBMS_LOB.GETLENGTH(CONTENTS)
---------- ----------------------------
1 3276700
SQL> SELECT ID, LENGTH(CONTENTS) FROM T_LOB;
ID LENGTH(CONTENTS)
---------- ----------------
1 3276700
這裡的LENGTH函式顯然不是對CLOB進行了隱式的TO_CHAR轉換,因為那樣的話,要不然因為CLOB長度太大而報錯,要不然CLOB自動擷取前4000個字元而LENGTH返回的長度則是4000。這裡的LENGTH函式明顯接收的是CLOB型別的引數。
除了LENGTH外,常用的INSTR、SUBSTR等都是支援LOB欄位的:
SQL> DECLARE
2 V_LOB CLOB;
3 BEGIN
4 SELECT CONTENTS
5 INTO V_LOB
6 FROM T_LOB
7 WHERE ID = 1
8 FOR UPDATE;
9 DBMS_LOB.WRITEAPPEND(V_LOB, 1000, RPAD('BCDEFG', 1000, 'A'));
10 COMMIT;
11 END;
12 /
PL/SQL procedure successfully completed.
SQL> SELECT DBMS_LOB.INSTR(CONTENTS, 'B')
2 FROM T_LOB
3 WHERE ID = 1;
DBMS_LOB.INSTR(CONTENTS,'B')
----------------------------
3276701
SQL> SELECT INSTR(CONTENTS, 'B')
2 FROM T_LOB
3 WHERE ID = 1;
INSTR(CONTENTS,'B')
-------------------
3276701
SQL> SELECT DBMS_LOB.SUBSTR(CONTENTS, 10, 3276701)
2 FROM T_LOB
3 WHERE ID = 1;
DBMS_LOB.SUBSTR(CONTENTS,10,3276701)
-------------------------------------------------------------------------------------------
BCDEFGAAAA
SQL> SELECT SUBSTR(CONTENTS, 3276701, 10)
2 FROM T_LOB
3 WHERE ID = 1;
SUBSTR(CONTENTS,3276701,10)
--------------------------------------------------------------------------------
BCDEFGAAAA
另外,LPAD、RPAD以及LTRIM和RTRIM也是支援CLOB型別的:
SQL> SELECT LTRIM(RTRIM(CONTENTS, 'A'), 'A')
2 FROM T_LOB
3 WHERE ID = 1;
LTRIM(RTRIM(CONTENTS,'A'),'A')
--------------------------------------------------------------------------------
BCDEFG
SQL> SELECT LENGTH(LPAD(CONTENTS, 10000000, 'B'))
2 FROM T_LOB
3 WHERE ID = 1;
LENGTH(LPAD(CONTENTS,10000000,'B'))
-----------------------------------
10000000
字元連線操作||也支援LOB型別:
SQL> SELECT LENGTH(CONTENTS || CONTENTS)
2 FROM T_LOB
3 WHERE ID = 1;
LENGTH(CONTENTS||CONTENTS)
--------------------------
6555400
如果想找更加詳細的支援LOB的函式說明可以參考LOB相關的文件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-664208/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySql之json_extract函式處理json欄位MySqlJSON函式
- MybatisPlus經典示例:使用Wrapper查詢指定欄位並新增欄位函式處理MyBatisAPP函式
- 查詢某欄位有特殊字元(PATINDEX函式)字元Index函式
- Mysql替換欄位中指定字元(replace 函式)MySql字元函式
- [20181020]lob欄位的索引段.txt索引
- ORACLE LOB大欄位維護Oracle
- SQL中的常用的字串處理函式大全SQL字串函式
- C++ 字元處理函式(cctype標頭檔案)C++字元函式
- iOS-GCD常用函式和柵欄函式iOSGC函式
- [20210208]lob欄位與查詢的問題.txt
- [20181022]lob欄位的lobid來之那裡.txt
- NumPy常用的位運算函式函式
- [20181031]lob欄位與布隆過濾.txt
- sql 統計多個欄位的和(如果欄位中含有 null 的處理)SQLNull
- 【LOB】Oracle Lob管理常用sqlOracleSQL
- springboot~mybatis統一處理公有欄位Spring BootMyBatis
- 資料處理之欄位合併
- pandas dataframe 時間欄位 diff 函式函式
- 陣列處理函式陣列函式
- 【LOB】Oracle lob管理常用語句Oracle
- Python基礎學習篇-4-常用的正規表示式處理函式Python函式
- JavaScript 非同步函式的 Promisification 處理JavaScript非同步函式
- SQL字元型欄位按數字型欄位排序實現方法SQL字元排序
- [重慶思莊每日技術分享]-重建LOB欄位上的IndexIndex
- 如果新增欄位是外來鍵,如何處理?
- 多型關聯自定義的型別欄位的處理多型型別
- [20180408]那些函式索引適合欄位的查詢.txt函式索引
- Flink處理函式實戰之四:視窗處理函式
- drf中常用的欄位及用法
- 【ORA-01555】Oracle LOB欄位匯出 報錯 ORA-01555Oracle
- echarts 繫結事件處理函式Echarts事件函式
- C語言之字串處理函式C語言字串函式
- Sanic 處理函式修飾器函式
- mongoDB中聚合函式java處理MongoDB函式Java
- JavaScript 註冊事件處理函式JavaScript事件函式
- 實戰SpringCloud通用請求欄位攔截處理SpringGCCloud
- MySQL - 分組連線欄位函式GROUP_CONCAT的使用MySql函式
- 使用 Eloquent ORM 使用 with 模型關聯查詢,如何處理select不同模型的欄位(欄位名可能相同)ORM模型
- Flink處理函式實戰之五:CoProcessFunction(雙流處理)函式Function