熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

教你快速掌握Oracle數據庫中的bfile

2013-11-13 16:16:38  來源: Oracle 

  具體步驟如下

  先在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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.