首页
看点啥
插画图片
首页 科技看点 Oracle-DBMS_LOB函数和用法说明实用指南

Oracle-DBMS_LOB函数和用法说明实用指南

2026-10-24 0

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Oracle-DBMS_LOB函数和用法说明”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

DBMS_LOB函数适用来 BLOB、CLOB、BFILE、NCLOB 等字段类型

  • BFILE:是把文件放在数据库外,数据库只是记录了文件位置(能够指向表)
  • BLOB:是把文件内容放在数据库里面,但也得借助bfile才能把文件内容存放到数据库。

1. GETLENGTH

拿到指定字段的长度

DBMS_LOB.GETLENGTH(lob_loc  IN  BLOB/CLOB/BFILE/NCLOB) RETURN  INTEGER;

2. OPEN

打开LOB对象

DBMS_LOB.OPEN(
    lob_loc IN OUT NOCOPY BLOB/CLOB/BFILE,
    open_mode IN BINARY_INTEGER -- 只读:DBMS_LOB.LOB_READONLY;读写:DBMS_LOB.LOB_READWRITE
);

3. READ

从 LOB 数据中读取指定长度数据到缓冲区(变量中)的过程

DBMS_LOB.READ(
    lob_loc IN BLOB/CLOB/BFILE, -- LOB 数据
    amount IN OUT NOCOPY BINARY_INTEGER), -- IN:要读取的字符数;OUT:实际读取的字符数
    offset IN INTEGER, -- 起始位置
    buffer OUT RAW/VARCHAR2 -— 存储返回数据的变量
);

4. WRITE

将指定数量的数据写入LOB的过程。

DBMS_LOB.WRITE(
    lob_loc IN OUT NOCOPY BLOB/CLOB, -- 被写入 LOB
    amount IN BINARY_INTEGER, -- 写入长度(指写入 LOB 数据)
    offset IN INTEGER, -- 写入起始位置(指被写入 LOB)
    buffer IN RAW/VARCHAR2 -- 写入 LOB 的数据
);

5. APPEND

将指定的LOB数据追加到指定的LOB数据后的过程。

DBMS_LOB.APPEND(
    dest_lob IN OUT NOCOPY BLOB, --追加到的目标LOB
    src_lob IN BLOB -- 用来追加的LOB
);

6. WRITEAPPEND

将缓冲区数据写到LOB尾部

    DBMS_LOB.WRITEAPPEND(
        lob_loc IN OUT NOCOPY BLOB/CLOB/NCLOB,
        amount IN BINARY_INTEGER,
        buffer IN RAW/VARCHAR2
    );

7. TRIM

截断LOB数据中从第一位置开始指定长度的部分数据的过程

DBMS_LOB.TRIM(
    lob_loc IN OUT NOCOPY BLOB/CLOB/NCLOB, --LOB数据
    newlen IN INTEGER -- 阶段长度
);

8. CLOSE

关闭已经打开的LOB

DBMS_LOB.CLOSE(lob_loc  IN  OUT  NOCOPY  BLOB/CLOB/BFILE); 

9. SUBSTR

从LOB数据中提取子字符串的函数。

DBMS_LOB.SUBSTR(
    lob_loc IN BLOB/CLOB/BFILE, -- 提取的来源
    amount IN INTEGER:=32762, -- 提取长度
    offset IN INTEGER:=1 -- 开始位置
)RETURN RAW/VARCHAR2; -- 提取到的内容

10. INSTR

从LOB数据中查找子字符串位置的函数。

DBMS_LOB.INSTR(
    lob_loc IN BLOB/CLOB/NCLOB/BFILE,
    pattern IN RAW/VARCHAR2,
    offset IN INTERGER:=1,
    nth IN INTEGER:=1
)RETURN INTEGER;

11. COMPAPE

比较二个大对象是否相等。得到数值0为相等,-1为不相等。

DBMS_LOB.COMPARE(
    lob_1 IN BLOB/CLOB/BFILE,
    lob_2 IN BLOB/CLOB/BFILE,
    amount IN INTEGER:=4294967295, --要比较的字符数(CLOB),字节数(BLOB)
    offset_1 IN INTEGER:=1, --lob_1 的起始位置
    offset_2 IN INTEGER:=1 --lob_2 的起始位置
);

12. ERASE

删除LOB数据中指定位置的部分数据的过程

DBMS_LOB.ERASE(
    lob_loc IN OUT NOCOPY BLOB/CLOB/NCLOB,
    amount IN OUT NOCOPY INTEGER, --字符/字节数
    offset IN INTEGER:=1 —起始位置
);

13. COPY

从指定位置开始将源LOB复制到目标LOB

DBMS_LOB.COPY(
    dest_lob IN OUT NOCOPY BLOB/CLOB/NCLOB, -- 目标的LOB
    src_lob IN BLOB/CLOB/NCOB, -- 拷贝的来源的LOB
    amount IN INTEGER, -- 拷贝的长度
    dest_offset IN INTEGER:=1, -- 目标从哪里开始接收
    src_offset IN INTEGER:=1 -- 来源从来历开始拷贝
);

14. CREATETEMPORARY

在用户的临时表空间里,建立临时LOB

DBMS_LOB.CREATETEMPORARY(
    lob_loc IN OUT NOCOPY BLOB/DLOB/NCLOB,
    cache IN BOOLEAN, -- 是否将LOB读取到缓冲区
    dur IN PLS_INTEGER:=10 -- 指定何时清除临时LOB(10:会话结束时;12:调用结束时)
);

15. ISTEMPORARY

确定定位符是否为临时LOB

DBMS_LOB.ISTEMPORARY(lob_loc  IN  BLOB/CLOB/NCLOB)  RETURN  INTEGER;

16. FILEEXISTS

确定FILE_LOC对应的OS文件是否存在。

1:存在;0:不存在

DBMS_LOB.FILEEXISTS(file_loc  IN  BFILE) RETURN  INTEGER;

17. FILEGETNAME

拿到BFILE定位符所对应的目录别名和文件名

DBMS_LOB.FILEGETNAME(
    file_loc IN BFILE,
    dir_alias OUT VARCHAR2,
    filename OUT VARCHAR2
);

18. FILEISOPEN

确定BFILE对应的OS文件是否打开

DBMS_LOB.FILEISOPEN(file_loc  IN  BFILE)  RETURN  INTEGER;

19. FREETEMPORARY

释放在默认临时表空间中的临时LOB

DBMS_LOB.FREETEMPORARY(lob_loc  IN  OUT  NOCOPY  BLOB/CLOB/NCLOB);

20. FILEOPEN

打开文件

DBMS_LOB.FILEOPEN(
    file_loc IN OUT NOCOPY BFILE,
    open_mode IN BINARY_INTEGER:FILE_READONLY
);

21. LOADBLOBFROMFILE

将BFILE数据装载到BLOB中,同时且在装载后取得最新的偏移位置

DBMS_LOB.LOADBLOBFROMFILE(
    dest_loc IN OUT NOCOPY BLOB,
    src_bfile IN BFILE,
    amount IN INTEGER,
    dest_offset IN OUT INTEGER,
    src_offset IN OUT INTEGER
);

22. FILECLOSE

关闭打开的BFILE定位符所指向的OS文件

DBMS_LOB.FILECLOSE(FILE_LOC  IN  OUT  NOCOPY  BFILE);

23. FILECLOSEALL

关闭当前会话已经打开的所有BFILE文件

DBMS_LOB.FILECLOSEALL();

总结

结合项目来看,总的来说,Oracle-DBMS_LOB适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。

喜欢(0)

上一篇

C# 利用委托给类内部传参的详细过程实用指南

下一篇

C#代码实现方式在Excel中编辑或删除批注实用指南

猜你喜欢