暂无图片
oracle 表中的 blob 存放的 jpg 图片,如何导出来。 PL/SQL 中查询,不能导出,有其它方法吗(非 业务程序里导出)?
我来答
分享
暂无图片 匿名用户
oracle 表中的 blob 存放的 jpg 图片,如何导出来。 PL/SQL 中查询,不能导出,有其它方法吗(非 业务程序里导出)?

oracle 表中的 blob 存放的 jpg 图片,如何导出来。 PL/SQL 中查询,不能导出,有其它方法吗(非 业务程序里导出)?

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
薛晓刚
2021-12-07

要写一段存储过程。比较麻烦。


你看能借鉴多少。

create or replace procedure dd (newid number)

as

blob_loc blob;

handle utl_file.file_type;

pic_length int;

amount int;

offset int:=1;

buffer raw(30000);

temp int;

newname varchar2(40);

begin

select name,pic into newname,blob_loc from sskb where id=newid;

pic_length:=dbms_lob.getlength(blob_loc);

handle:=utl_file.fopen('USER_DIR',newname||'.jpg','wb');

temp:=trunc((pic_length-1)/1000)+1;

for i in 1..temp

loop

if i!=temp

then amount:=1000;

else

amount:=pic_length-(temp-1)*1000;

end if;

dbms_lob.read(blob_loc,amount,offset,buffer);

offset:=offset+1000;

utl_file.put_raw(handle,buffer);

end loop;

utl_file.fclose(handle);

end;

/

暂无图片 评论
暂无图片 有用 0
打赏 0
DarkAthena
2021-12-07

你是想导出到数据库服务器上还是导出到客户端本地?

1.如果是导出到数据库上,用下面这个过程将BLOB转换成文件

  procedure blob2file
    ( p_blob blob
    , p_directory varchar2 := 'MY_DIR'
    , p_filename varchar2 := 'my.jpg'
    )
  is
    t_fh utl_file.file_type;
    t_len pls_integer := 32767;
  begin
    t_fh := utl_file.fopen( p_directory
                          , p_filename
                          , 'wb'
                          );
    for i in 0 .. trunc( ( dbms_lob.getlength( p_blob ) - 1 ) / t_len )
    loop
      utl_file.put_raw( t_fh
                      , dbms_lob.substr( p_blob
                                       , t_len
                                       , i * t_len + 1
                                       )
                      );
    end loop;
    utl_file.fclose( t_fh );
  end;

2.如果是简单的客户端导出,由于导出的都是文本,所以要么将BLOB转换成十六进制文本再进行导出,要么就转成BASE64文本再导出,再用其他工具读取文本信息还原成图片文件。

3.也可以写个python脚本或者java脚本,直接读取blob数据然后保存成文件

4.当然,如果你只要导出一张图片,完全可以用plsql developer打开后,点击上面的保存按钮来保存这张图片

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏