访问 BFILE
BFILE 是外部 LOB 类型,存放着指向 OS 文件的指针,其所对应的文件长度不能超过 4G。BFILE 所对应的 OS 文件内容只能读取不能修改。
在 oracle 数据库访问 OS 文件时,首先必须建立 DIRECTORY 对象;而建立 DIRECTORY 对象则要求用户必须具有 CREATE ANY DIRECTORY 权限。
为用户授予 CREATE ANY DIRECTORY 权限
conn sys/sys as sysdba
grant create any directory to scott;
创建 DIRECTORY 对象
conn scott/tiger
create [ or replace ] directory ORCL_DIR as 'D:\sql';
示例
建立包含 BFILE 列的表
create table lob_example
(
serial number(6) primary key,
p_name varchar2(10),
p_resume bfile
);
初始化 BFILE 列
使用函数 BFILENAME() 来初始化 BFILE 列。使用 BFILENAME() 函数时, DIRECTORY 对象必须使用大写格式。
insert into lob_example values(1, 'KING', bfilename('ORCL_DIR','KING.txt'));
insert into lob_example values(2, 'AMY', bfilename('ORCL_DIR', 'AMY.txt'));;
读取 BFILE 列的数据
使用包 DBMS_LOB 的 READ,使用 RAW 类型的变量接收其读出的数据。
declare
buff raw(2000);
amount int;
offset int := 1;
lob_loc bfile;
begin
select p_resume into lob_loc from scott.lob_example where serial=&serial;
dbms_lob.fileopen(lob_loc, 0);
amount := dbms_lob.getlength(lob_loc);
dbms_lob.read(lob_loc, amount, offset, buff);
dbms_lob.fileclose(lob_loc);
end;