建立資料表與目錄
CREATE TABLE IMAGE_LOB (T_ID VARCHAR2(5) NOT NULL, T_IMAGE BLOB NOT NULL);
CREATE OR REPLACE DIRECTORY IMAGES AS 'C:\ORACLE'; -- 圖片目錄
建立預存程序 IMG_INSERT
CREATE OR REPLACE PROCEDURE IMG_INSERT (TID VARCHAR2, FILENAME VARCHAR2) AS
F_LOB BFILE;
B_LOB BLOB;
BEGIN
INSERT INTO IMAGE_LOB (T_ID, T_IMAGE)
VALUES (TID, EMPTY_BLOB()) RETURN T_IMAGE INTO B_LOB;
F_LOB := BFILENAME('IMAGES', FILENAME);
DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READONLY);
DBMS_LOB.LOADFROMFILE(B_LOB, F_LOB, DBMS_LOB.GETLENGTH(F_LOB));
DBMS_LOB.FILECLOSE(F_LOB);
COMMIT;
END;
/
執行範例
EXEC IMG_INSERT('1', 'F_TEST.JPG');
-- PL/SQL 程序成功完成
關鍵點
- 使用
BFILENAME 指向外部檔案(需 CREATE DIRECTORY 權限)。
EMPTY_BLOB() 初始化 BLOB 並透過 RETURNING 取得 LOB 定位器。
DBMS_LOB.LOADFROMFILE 將 BFILE 內容載入 BLOB。
- 任何開發工具皆可呼叫此程序儲存圖片。