DBMS_LOB系统包
📄字数 1.6K
👁️阅读量 加载中...
一、概述
DBMS_LOB系统包是用于支持大对象(LOB,Large Object)数据类型的系统包。它允许用户在PL/SQL中对BLOB(二进制大对象)和CLOB(字符大对象)等字段进行读取操作。该包适用于处理大型文本、图像、音频、PDF等非结构化数据。
该系统包中提供了以下接口:
包体函数名 | 简要描述 |
---|---|
GETLENGTH | 获取大对象长度 |
READ | 读取大对象数据 |
典型应用场景,如:
- 检查大对象字段内容大小,使用GETLENGTH获取BLOB/CLOB实际存储长度
- 从CLOB中读取正文段落,使用READ从指定位置读取部分文本
- 读取BLOB前几位做内容校验,比如读取文件头判断是否为图片、PDF等
二、GETLENGTH
2.1 功能描述
该方法有2种重载方式,分别对应计算BLOB/CLOB数据类型的长度
2.2 方法声明
重载形式一:计算BLOB数据的长度
sqlFUNCTION GETLENGTH( lob_loc BLOB ) RETURN INTEGER
重载形式二:计算CLOB数据的长度
sqlFUNCTION GETLENGTH( lob_loc CLOB ) RETURN INTEGER
2.3 参数说明
参数名 | 类型 | 取值范围 | 是否可选 | 描述 |
---|---|---|---|---|
lob_loc | BLOB/CLOB | 无 | 否 | 数据源 |
2.4 示例
sql
SQL> CREATE TABLE table_lob(id INT,cb BLOB,cc CLOB);
SQL> INSERT INTO table_lob VALUES(1,UTL_RAW.CAST_TO_RAW('BLOB数据'),'CLOB数据');
-- 计算BLOB/CLOB数据的长度
SQL> SELECT DBMS_LOB.GETLENGTH(cb) len_blob,DBMS_LOB.GETLENGTH(cc) len_clob FROM table_lob WHERE id=1;
+----------+----------+
| LEN_BLOB | LEN_CLOB |
+----------+----------+
| 10 | 6 |
+----------+----------+
2.5 场景应用
- 场景一:在数据库中,有些LOB字段内容非常大,可能拖慢查询性能,可以通过该方法计算数据量,优化处理方式
- 场景二:数据全备时,LOB字段可能导致备份慢或备份包异常大,以通过该方法计算LOB数据量,分段或分期备份
三、READ
3.1 功能描述
该方法有2种重载方式,分别对应读取BLOB/CLOB数据类型的内容
3.2 方法声明
重载形式一:读取BLOB大对象数据
sqlPROCEDURE READ( lob_loc BLOB, amount INTEGER, offset INTEGER, out_buff OUT VARCHAR );
重载形式二:读取CLOB大对象数据
sqlPROCEDURE READ( lob_loc CLOB, amount INTEGER, offset INTEGER, out_buff OUT VARCHAR );
3.3 参数说明
参数名 | 类型 | 取值范围 | 是否可选 | 描述 |
---|---|---|---|---|
lob_loc | BLOB/CLOB | 无 | 否 | 要读取的大对象 |
amount | INTEGER | 无 | 否 | 读取的长度 |
offset | INTEGER | 无 | 否 | 偏移量 |
out_buff | VARCHAR | 无 | 否 | OUT型参数,读取内容返回给该参数 |
提示
1、偏移量为1时表示起始位置
2、当读取长度大于大对象实际长度时,取大对象实际长度进行读取
3.4 示例
sql
-- 创建用于读取CLOB数据的存储函数
SQL> CREATE OR REPLACE FUNCTION read_lob(
col CLOB,
read_len INT,
start_pos INT
)
RETURN VARCHAR
IS
ret_buff VARCHAR;
BEGIN
DBMS_LOB.READ(col,read_len,start_pos,ret_buff);
RETURN ret_buff;
END;
/
-- 读取CLOB对象cc的数据
SQL> SELECT read_lob(cc,6,1) ret FROM table_lob WHERE id=1;
+----------+
| RET |
+----------+
| CLOB数据 |
+----------+
3.5 场景应用
- 场景一:当将异常信息写入CLOB字段时,可以使用此方法读取内容进行故障定位
- 场景二:某些系统使用BLOB存储密文,运维人员可以配合解密函数读取内容,进行辅助调试
- 场景三:其他一些使用BLOB/CLOB进行数据存储的场景