delphi dbgrideh 字段显示为blob_oracle数据库blob格式导出照片小工具

经常会遇到要给数据库中的blob格式数据文件导出为'.jpg'格式的图片。猛然觉得是该有个小工具直接导出照片了...(小工具产生背景)

实验环境:oracle数据库11.2.0.4,win系统(此实验系统之间差别甚微)实验目的:某张表中图片以blob格式存在数据库中,将其导成“.jpg” 格式。

数据库表格式

3c292f0455d06ffe439f980e387b77c4.png

实现步骤:

  1. 需表中字段有一列为递增字段;此时图片导出将可以以另一列命名----即此场景为:xm.jpg
1428138ebda1d6d001cd9aa35d9c0eb3.png

2. 新建目录并授权;此操作是设置图片导出文件夹。

----首先从数据库中创建目录:当前实验环境下已将dba权限授给scott用户,直接使用scott用户创建了目录。合乎规范的做法是:

使用sys用户或者使用system用户登录:

create direcoty dir as 'E:/photo';----linux系统的话,直接更换路径即可。

grant read,write on directory dir to scott;---此时授权给单个用户即可。或者

grant all on direcotry dir to public;---此授权含义是:将dir目录的所有权限开放给公共角色(此角色是所有的数据库用户都具备)

3fd8d46622a3ebe56e1a65c3c27098ea.png

3.创建存储过程:

3d523f740b87d22809293fea441cb4a1.png

此过程为核心内容,看不懂没有关系,会用即可。代码如下:

---

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;

4.语句调用存储过程导出照片;

9e21b5430c76b9f40748f1971b2cf149.png

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;

/

效果图:

f2517102703c23f51ce4aaacdbba42d3.png

觉得好的话就给个赞呗,顺便给朋友推荐一下

c0cab586725d73e1c8106fb3bf47860c.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值