oracle blob update,Oracle数据库中对BLOB数据的操作问题

【TechTarget中国原创】问:请问在Oracle数据库中,如何插入并检索二进制大对象数据(BLOB)?

答:我建议在处理大对象数据之前,先阅读一下“Oracle应用开发者指南”中的大对象部分。

下面给出的链接就是在线版本,其中14章给出了一些插入和读取BLOB的例子:

14章

下面我通过一个具体的实例,来演示如何将外部文件导入一个BLOB列中:

第一步:创建一个目录,指向BLOB的位置。将“blob_dir”替换成“/oradata/blobs”。

第二步:为使用该目录的用户提供可读授权。

第三步:创建大对象表。

-- the storage table for the image file

CREATE TABLE my_blobs (

dname VARCHAR2(30), -- directory name

sname VARCHAR2(30), -- subdirectory name or description

fname VARCHAR2(30), -- file name

fblob BLOB); -- blob file

第四步:创建一个存储过程,用来插入BLOB对象。

-- create the procedure to load the blob file

CREATE OR REPLACE PROCEDURE load_blob (

pdname VARCHAR2,

psname VARCHAR2,

pfname VARCHAR2) IS

src_file BFILE;

dst_file BLOB;

lgh_file BINARY_INTEGER;

BEGIN

src_file := bfilename('BLOB_DIR', pfname);

-- insert a NULL record to lock

INSERT INTO my_blobs

(dname, sname, fname, fblob)

VALUES

(pdname, psname, pfname, EMPTY_BLOB())

RETURNING fblob INTO dst_file;

-- lock record

SELECT fblob

INTO dst_file

FROM my_blobs

WHERE dname = pdname

AND sname = psname

AND fname = pfname

FOR UPDATE;

-- open the file

dbms_lob.fileopen(src_file, dbms_lob.file_readonly);

-- determine length

lgh_file := dbms_lob.getlength(src_file);

-- read the file

dbms_lob.loadfromfile(dst_file, src_file, lgh_file);

-- update the blob field

UPDATE my_blobs

SET fblob = dst_file

WHERE dname = pdname

AND sname = psname

AND fname = pfname;

-- close file

dbms_lob.fileclose(src_file);

END load_file;

/

第五步:执行存储过程。

SQL> exec load_blob('BLOB_DIR','Head shot photo','km_pic.png');

PL/SQL procedure successfully completed.

你现在可以通过检查大小,来验证原始对象与数据库对象的匹配。

第六步:从OS上检查BLOB大小。

SQL> !ls -l /oradata/blobs/km_pic.png

-rwxr-xr-x 1 oracle oinstall 21150 Jan 6 01:55 /oradata/blobs/km_pic.png

第七步:从Oracle检查BLOB大小。

1 declare

2 a blob;

3 begin

4 select fblob into a from my_blobs;

5 dbms_output.put_line(dbms_lob.getlength(a));

6* end;

SQL> /

21150

PL/SQL procedure successfully completed.

TechTarget中国原创内容,原文链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值