需將作業系統檔案 (圖片、文件等) 載入資料庫 BLOB 欄位,標準流程:建立 DIRECTORY 物件 → PL/SQL 使用 DBMS_LOB 讀取 BFILE 寫入 BLOB。
CREATE OR REPLACE DIRECTORY IMAGES AS 'F:\';
需具備 CREATE ANY DIRECTORY 權限,並對 OS 目錄有讀取權限。
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 | 用途 |
|---|---|
| 初始化空 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 處理。SECUREFILE LOB 儲存選項 (壓縮、重複資料刪除、加密)。