首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 大型物件 (LOB) 插入存儲過程實作:BFILE 載入 BLOB 完整範例

     編輯:Oracle 資料庫基礎

需將作業系統檔案 (圖片、文件等) 載入資料庫 BLOB 欄位,標準流程:建立 DIRECTORY 物件 → PL/SQL 使用 DBMS_LOB 讀取 BFILE 寫入 BLOB。

步驟 1:建立 Directory 物件對應 OS 目錄

CREATE OR REPLACE DIRECTORY IMAGES AS 'F:\';

需具備 CREATE ANY DIRECTORY 權限,並對 OS 目錄有讀取權限。

步驟 2:建立插入存儲過程

CREATE OR REPLACE PROCEDURE IMG_INSERT (FILENAME VARCHAR2) AS
  F_LOB BFILE;
  B_LOB BLOB;
BEGIN
  -- 1. 插入空 BLOB 並取得 LOB Locator
  INSERT INTO T_FILE_URL (FILENR1) VALUES (EMPTY_BLOB())
  RETURNING FILENR1 INTO B_LOB;

  -- 2. 建立 BFILE 指向 OS 檔案
  F_LOB := BFILENAME('IMAGES', FILENAME);

  -- 3. 唯讀模式開啟 BFILE
  DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READONLY);

  -- 4. 將 BFILE 內容完整載入 BLOB
  DBMS_LOB.LOADFROMFILE(B_LOB, F_LOB, DBMS_LOB.GETLENGTH(F_LOB));

  -- 5. 關閉 BFILE
  DBMS_LOB.FILECLOSE(F_LOB);

  -- 6. 提交交易
  COMMIT;
END;
/

關鍵 API 說明

EMPTY_BLOB()RETURNING ... INTOBFILENAME(dir, file)DBMS_LOB.FILEOPENDBMS_LOB.LOADFROMFILEDBMS_LOB.GETLENGTHDBMS_LOB.FILECLOSE
API用途
初始化空 LOB 並分配 Locator
取得剛插入列的 LOB Locator 供後續操作
建立指向 OS 檔案的 BFILE Locator
開啟 BFILE (唯讀/讀寫)
高效將 BFILE 資料複製到 BLOB/CLOB
取得 LOB 長度,確保完整複製
釋放 BFILE 資源

注意事項

  • DIRECTORY 物件權限:GRANT READ ON DIRECTORY IMAGES TO user;
  • 大檔案建議分塊載入或啟用 DBMS_LOB.CREATETEMPORARY 暫存 LOB 處理。
  • 資料庫版本 12c+ 可考慮 SECUREFILE LOB 儲存選項 (壓縮、重複資料刪除、加密)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved