欢迎光临散文网 会员登陆 & 注册

oracle数据库blob格式导入、导出照片

2023-08-17 12:53 作者:乒乒乓乓乒乒乓乓呀  | 我要投稿

一。创建测试表(SCOTT用户)

create table photo(

rdid nvarchar2(30) not null,

rdphoto blob,

xm varchar2(100)

);

select * from photo t;

二。创建文件所在目录,并插入图片

create or replace directory "tmp" as 'd:/tmp';

--

declare

b_file bfile;

b_lob blob;

begin

insert into photo(rdid,xm,rdphoto) values(1,'ABC', empty_blob()) 

return rdphoto into b_lob;

--为了使PL/SQL编译成功,必须先为该列插入一个empty_blob() 值,return rdphoto  into b_lob将该列与一个blog类型的变量绑定在一起,以后只要为b_lob赋值,即等于将该值插入了表中。

b_file:=bfilename('tmp','Default.jpg');

--tmp是建立的文件所在的目录,filename.jpg是文件名;将文件转换为bfile类型

dbms_lob.open(b_file,dbms_lob.file_readonly);--将b_file 以只读的方式打开

dbms_lob.loadfromfile(b_lob,b_file,dbms_lob.getlength(b_file));-- 将b_file中的内容转换到b_lob中

dbms_lob.close(b_file);

commit;

end;

三。查看结果

四。创建导出目录文件夹并授权给scott用户

五。导出图片

--

CREATE OR REPLACE PROCEDURE exphoto (xh VARCHAR2) is

l_file utl_file.file_type;

l_lob blob;

l_offset int := 1;

l_amount int := 32767;

l_len int;

l_buffer RAW (32767);

x VARCHAR2 (100);

begin

select rdphoto INTO l_lob FROM photo t WHERE rdid = xh ; 

SELECT xm INTO x FROM photo WHERE rdid = xh;

l_file := utl_file.fopen ('DIR', x || '.jpg', 'wb', 32767);

l_len := dbms_lob.getlength (l_lob);

while l_offset < l_len loop

dbms_lob.read ( l_lob, l_amount, l_offset, l_buffer );

utl_file.put_raw ( l_file, l_buffer, true );

l_offset := l_offset + l_amount;


END loop;

utl_file.fclose ( l_file );


END exphoto;

--

declare

cursor cur is

select rdid from photo where rownum <= 10 and rdphoto is not null;

begin

for rec in cur loop

exphoto(rec.rdid);

end loop;

end;


oracle数据库blob格式导入、导出照片的评论 (共 条)

分享到微博请遵守国家法律