訪問 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;