具體步驟如下
先在oracle數據庫中下面我們建立一個目錄別名用於將文件定位指針映射到文件系統
create DIRECTORY tmpdir AS /tmp;
tmpdir表示邏輯目錄名/tmp是實際目錄 注意該目錄oracle應該有讀權限 然後根據需要授權
GRANT READ ON DIRECTORY bfile_dir TO scott;
建立一個含有bfile字段的表
create table bfiletest(id number() fname bfile);
建立一個含有BLOB字段的表
create table blobtest(id number()ablob blob);
插入數據
這裡需要使用bfilename來進行bfile字段的insert 或者 update操作
INSERT INTO bfiletest
VALUES ( BFILENAME (tmpdir tmptest));
bfilename的參數是DIRECTORY名參數是文件名注意這一行中插入的是
一個指向/tmp/tmptest的文件定位指針映射不是文件本身
讀取bfile
通過使用dbms_lob包進行可以對bfile讀入到blob/clob對象中操作(只讀)
CREATE OR REPLACE PROCEDURE loadLOBFromBFILE_proc(
TID IN NUMBERrfilename in varcharrfiledir
in varcharupmessage out varchar)
AS
Dest_loc BLOB;
Src_loc BFILE;
BEGIN
INSERT INTO BLOBTEST(IDABLOB)
VALUES(TIDEMPTY_BLOB()) RETURN ABLOB INTO DEST_LOC;
Src_loc := BFILENAME(rfiledirrfilename);
/* 如果bfile文件實際存在 */
IF (DBMS_LOBFILEEXISTS(Src_loc) != )
THEN
/* 打開bfile源文件 */
DBMS_LOBOPEN(Src_loc DBMS_LOBLOB_READONLY);
/* 打開目標blob: */
DBMS_LOBOPEN(Dest_loc DBMS_LOBLOB_READWRITE);
/*從文件中裝入 */
DBMS_LOBLOADFROMFILE(Dest_loc
Src_locDBMS_LOBGETLENGTH(Src_loc));
/* 記得關閉: */
DBMS_LOBCLOSE(Dest_loc);
DBMS_LOBCLOSE(Src_loc);
COMMIT;
upmessage := ;
END IF;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
upmessage := 操作失敗;
END;
(注釋bfile字段實際的文件存儲在文件系統中字段中存儲的是文件定位指針bfile對oracle來說是只讀的也不參與事務性控制和數據恢復)
From:http://tw.wingwit.com/Article/program/Oracle/201311/18077.html