插入示例
- 利用存储过程进行插入数据
–创建存储图片的表
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;
修改示例
- 通过过程进行修改
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;
/
- 验证结果
select * from IMAGE_LOB;