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();
20.
20.
20.
20.
20.
20.
20.
Oracle 文章被收录于专栏
Oracle