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

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

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

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


你看能借鉴多少。

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

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

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
回答交流
Markdown


请输入正文
提交
相关推荐
oracle数据导出
回答 3
已采纳
KETTLE、Navicat、PLSQLDeveloper、sqluldr2,数据量大就用sqluldr2
Oracle 19C rac 2节点执行root.sh出错,没详细信息
回答 1
Followthebelowactionplan,1.Update/etc/login.defsto0022,2.Verifyusing"suoraclec"umask""3.Rerunroot.sh
Oracle 11g的所有redo日志都被删除了,也没做归档,有什么办法强起数据库吗?
回答 5
刘贵宾,如果allowresetlogscorruption为FALSE,DB到NOMOUNT状态,然后重建CONTROLFILE和REDOLOG,也行吧?
Oracle shrink表时候产生的归档大小是原表大小的几倍?
回答 1
相当于删除再插入,这样来整理空间,生成的归档量当然大。move好用,moveonline,可以试试,如果表不大,有闲时很好用。
oracle 9i直接升级11g,12c
回答 4
建议先从9i升级到11g过渡。19C是12C的稳定版本,建议使用19C
expdp导出数据时报错
回答 3
已采纳
看看导出的gcdataimplog表中是不是有lob字段。
公司要迁移oracle单机到rac,怎么能做不停机?
回答 1
已采纳
做dg
分区表的选择
回答 2
可以考虑使用组合分区,主分区按照addtime进行时间分区,子分区按照作业taskid进行list分区。
麻烦问下各位大佬 在下载oracle补丁时(11.2.0.4.0)一直提示有超集,是必须要下载最新的吗?
回答 1
那倒没有必须的,你要只想下载解决你问题的patch也是可以的,提示只是告诉你这个patch被合并到后来的补丁集里了,你单独下这个解决你问题的也是可以的。
备份控制文件 for standby 报错ORA-15122: ASM 文件名 ‘+DATAO1_MF_1_HW6DTWQ8_.LOG’ 包含无效的文件编号
回答 1
请提供。(1)数据库版本。(2)具体执行命令。