插入示例

1. 利用存储过程进行插入数据

--创建存储图片的表

CREATE TABLE IMAGE_LOB (T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);

--创建存储图片的目录,我这里在本地C盘

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

--通过存储过程来实现插入

CREATE OR REPLACE PROCEDURE IMG_INSERT (TID VARCHAR2,FILENAME VARCHAR2) AS

F_LOB BFILE;--文件类型

B_LOB BLOB;

BEGIN

--插入空的blob:EMPTY_BLOB ()

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;

/

2. 调用存储过程插入图片

call IMG_INSERT('1','1.jpg');

3. 验证结果

select * from IMAGE_LOB;

修改示例

1. 通过过程进行修改

declare

l_bfile bfile;

l_blob blob;

begin

update IMAGE_LOB set T_IMAGE=empty_blob() where T_ID=1 return T_IMAGE into l_blob;

--图片路径还在C盘,通过系统表SELECT * FROM dba_directories;查询

l_bfile:=bfilename('IMAGES','2.jpg');

--以只读的方式打开文件

dbms_lob.open(l_bfile,dbms_lob.file_readonly);

--传递对象

dbms_lob.loadfromfile(l_blob,l_bfile,dbms_lob.getlength(l_bfile));

--关闭原始文件

dbms_lob.close(l_bfile);

commit;

end;

/

2. 验证结果

select * from IMAGE_LOB;