Oracle 11g PL/SQL程序块,存储图片等BLOB字段类型的列PL/

Oracle 11g PL/SQL程序块,存储图片等BLOB字段类型的列

例如:把一个人的图片放入PERSON表的photo列中
一、在Oracle中创建,一个存储图片的目录逻辑,其与硬盘中的图片存储路径一致。
硬盘中有此目录:
  用system登录,权限比较大,创建oracle目录逻辑;把此目录的读写权限赋给test用户。
SQL命令:
1.以system身份登录 
SQLPLUS system/manager@orcl
2.创建oracle目录逻辑 
create directory PHOTO  as 'D:\Photo';
3.将目录的读/写权限赋给test用户
grant read,write on directory PHOTO to test;
Oracle 11g PL/SQL程序块,存储图片等BLOB字段类型的列PL/_第1张图片

二、创建存储过程,存入图片
1.登录test用户,创建存储过程
--创建图片存储过程insertBlob,有两个参数id 图片id,imgFile 图片名称
create or replace procedure insertBlob(id number,imgFile varchar2)
is
  --声明变量
  --存放图片文件
  img_file    bfile;
  --存放图片字段列
  img_blob    blob;
  --图片的文件的长度即大小
  lob_len     number;
begin
  --插入一个图片空值用empty_blob()
  insert into person values(id,empty_blob());
  --查询上面插入的空值,并赋值给img_blob
  select photo into img_blob from person where pid=id;
  --读取imgFile中的内容,PHOTO为之前建立的目录,imgFile为此路径下的图片文件名称即p.jpg
  img_file :=bfilename('PHOTO',imgFile);
  --打开图片文件
  dbms_lob.open(img_file);
  --获取图片文件长度
  lob_len :=dbms_lob.getlength(img_file);
  --从img_file文件中装载长度为lob_len的图片文件到img_blob列中
  dbms_lob.loadfromfile(img_blob,img_file,lob_len);
  --关闭文件
  dbms_lob.close(img_file);
  commit;
end;
/
2.执行存储过程,存入图片
exec insertBlob(1,'p.jpg');
3.查询存储结果
select photo from person;
Oracle 11g PL/SQL程序块,存储图片等BLOB字段类型的列PL/_第2张图片
PL/SQL中查询显示
Oracle 11g PL/SQL程序块,存储图片等BLOB字段类型的列PL/_第3张图片





你可能感兴趣的:(Oracle)