文章詳情頁(yè)
ORACLE中BFILE字段的使用研究
瀏覽:49日期:2023-11-15 11:42:18
因?yàn)樽鲰?xiàng)目,需要使用BFILE字段存儲(chǔ)圖像文件,所以進(jìn)行了一些研究。bfile字段實(shí)際的文件存儲(chǔ)在文件系統(tǒng)中,字段中存儲(chǔ)的是文件定位指針.bfile對(duì) Oracle來說是只讀的,也不參與事務(wù)性控制和數(shù)據(jù)恢復(fù) ;bfile的基本操作如下: 1.先在oracle數(shù)據(jù)庫(kù)中下面我們建立一個(gè)目錄別名,用于將文件定位指針映射到文 件系統(tǒng):; create DirectorY 'tmpdir' AS '/tmp'tmpdir表示邏輯目錄名,'/tmp'是實(shí)際目錄。 注重該目錄oracle應(yīng)該有讀權(quán)限 然后根據(jù)需要授權(quán) GRANT READ ON DIRECTORY bfile_dir1 TO scott; 建立一個(gè)含有bfile字段的表 create table bfiletest(id number(3), fname bfile); 建立一個(gè)含有BLOB字段的表create table bloBTest(id number(3),ablob blob);2.插入數(shù)據(jù) 這里需要使用bfilename來進(jìn)行bfile字段的insert 或者 update操作 INSERT INTO bfiletest VALUES (1, BFILENAME ('tmpdir', 'tmptest')); bfilename的參數(shù)1是DIRECTORY名,參數(shù)2是文件名。注重:這一行中插入的是 一個(gè)指向/tmp/tmptest的文件定位指針映射,不是文件本身。 3.讀取bfile 通過使用dbms_lob包進(jìn)行可以對(duì)bfile讀入到blob/clob對(duì)象中操作(只讀); CREATE OR REPLACE PROCEDURE loadLOBFromBFILE_proc(TID IN NUMBER,rfilename in varchar2,rfiledir in varchar2,upmessage out varchar2) AS Dest_loc;;;;BLOB; Src_loc;;;;;BFILE;BEGIN INSERT INTO BLOBTEST(ID,ABLOB) VALUES(TID,EMPTY_BLOB()) RETURN ABLOB INTO DEST_LOC; Src_loc := BFILENAME(rfiledir,rfilename); /* 假如bfile文件實(shí)際存在 */ IF (DBMS_LOB.FILEEXISTS(Src_loc) != 0) THEN /* 打開bfile源文件 */; DBMS_LOB.OPEN(Src_loc, DBMS_LOB.LOB_READONLY); /* 打開目標(biāo)blob: */; DBMS_LOB.OPEN(Dest_loc, DBMS_LOB.LOB_READWRITE); /*從文件中裝入 */ DBMS_LOB.LOADFROMFILE(Dest_loc, Src_loc,DBMS_LOB.GETLENGTH(Src_loc)); ;/* 記得關(guān)閉: */; DBMS_LOB.CLOSE(Dest_loc); DBMS_LOB.CLOSE(Src_loc); COMMIT; upmessage := '0' END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; upmessage := '操作失敗'END;
標(biāo)簽:
Oracle
數(shù)據(jù)庫(kù)
排行榜
