开发要求把两张图片插入到表中,趁机学了下oracle把图片插入blob字段的方法
1. 在操作系统创建一个oracle用户可以访问的目录
mkdir -p /home/oracle/picture
2. 把图片上传到该目录并允许oracle用户访问
3. 在数据库中创建目录
create or replace directory images as ‘/home/oracle/picture/’;
4. 执行以下语句对已有数据进行更新
declare
l_bfile bfile;
l_blob blob;
begin
update
test_picture
set
字段名
=empty_blob() where
ID=’xxxx’
return
字段名
into l_blob;
l_bfile:=bfilename(‘IMAGES’,’
xx.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;
/
其中IMAGES为数据库目录名(区分大小写)
也可以利用存储过程进行插入
--创建存储图片的表
CREATE TABLE IMAGE_LOB (T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);
--创建存储图片的目录
CREATE OR REPLACE DIRECTORY IMAGES AS 'C:/picture';
--在c:下自己建一个叫picture的文件夹
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;
--插入空的blob
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;
/
--在C:/picture下放一张图片1.gif
--将该图片存入表
exec IMG_INSERT('1','1.gif');
参考