關于對bfile的基本操作全面介紹
2024-07-21 02:34:35
供稿:網友
 
             
  bfile字段實際的文件存儲在文件系統中,字段中存儲的是文件定位指針.bfile對Oracle來說是只讀的,也不參與事務性控制和數據恢復 
  
  bfile的基本操作如下: 
  
                                                                                              1.先在oracle數據庫中下面我們建立一個目錄別名,用于將文件定位指針映射到文件系統: 
  
  create DirectorY 'tmpdir' AS '/tmp'; 
  tmpdir表示邏輯目錄名,'/tmp'是實際目錄。 注重該目錄oracle應該有讀權限 
  
  然后根據需要授權 
  GRANT READ ON DIRECTORY bfile_dir1 TO scott; 
  建立一個含有bfile字段的表 
  create table bfiletest(id number(3), fname bfile); 
  
  2.插入數據 
  這里需要使用bfilename來進行bfile字段的insert 或者 update操作 
  代碼: 
  
  INSERT INTO bfiletest 
     VALUES (1, BFILENAME ('tmpdir', 'tmptest')); 
   
  bfilename的參數1是DIRECTORY名,參數2是文件名。注重:這一行中插入的是 
  
  一個指向/tmp/tmptest的文件定位指針映射,不是文件本身。 
  
  3.讀取bfile 
  
  通過使用dbms_lob包進行可以對bfile讀入到blob/clob對象中操作(只讀) 
  代碼: 
  
  CREATE OR REPLACE PROCEDURE loadLOBFromBFILE_proc IS 
    Dest_loc    BLOB; 
    Src_loc    BFILE := BFILENAME('tmpdir', 'tmptest'); 
  
  BEGIN 
    SELECT blob_col INTO Dest_loc FROM aBLOBTable 
      WHERE ID= 111 
       FOR UPDATE; 
  
    /* 假如bfile文件實際存在 */ 
    IF (DBMS_LOB.FILEEXISTS(Src_loc) != 0) 
    THEN 
      /* 打開bfile源文件 */ 
      DBMS_LOB.OPEN(Src_loc, DBMS_LOB.LOB_READONLY); 
      /* 打開目標blob: */ 
      DBMS_LOB.OPEN(Dest_loc, DBMS_LOB.LOB_READWRITE); 
      /*從文件中裝入 */ 
      DBMS_LOB.LOADFROMFILE(Dest_loc, Src_loc,DBMS_LOB.GETLENGTH(Src_loc)); 
      /* 記得關閉: */ 
      DBMS_LOB.CLOSE(Dest_loc); 
      DBMS_LOB.CLOSE(Src_loc); 
      COMMIT; 
    END IF; 
    EXCEPTION 
      WHEN OTHERS THEN 
       DBMS_OUTPUT.PUT_LINE('Operation failed'); 
  
  END; 
   
  會話能打開多少個文件有init參數session_MAX_OPEN_FILES決定文件大小由OS決定, 32位的文件系統為每個文件2gb或4gb