LOB数据管理--更新LOB列

LOB的更新可以通过DML语句实现,也可以通过存储过程去实现。

我这里是通过一个简单的PL/SQL过程实现的

[oracle@rac1 ~]$ export ORACLE_SID=rac1
[oracle@rac1 ~]$ sqlplus mayp/mayp

SQL*Plus: Release 10.1.0.5.0 - Production on Thu Aug 2 05:24:48 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.5.0 - Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options

SQL>

SQL> alter table lob_test add constraint pk_lob_test primary key (NUM);

Table altered.

[@more@]

SQL> desc lob_test
Name Null? Type
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(100)
IMAGE BLOB
NOTE CLOB
NUM NOT NULL NUMBER(38)

SQL> select num from lob_test;

NUM
----------
1
2
3
4

SQL>

模拟更新num=1所在的行的image字段

SQL> DECLARE
p_lobloc BLOB;
p_sql varchar2(10000);
p_file BFILE;
P_amt INTEGER;
no_lob_data EXCEPTION;
BEGIN
p_sql := 'SELECT image FROM lob_test WHERE num = :num FOR UPDATE';
EXECUTE IMMEDIATE p_sql
INTO p_lobloc
USING 1;
P_amt := DBMS_LOB.GETLENGTH(p_lobloc);
DBMS_LOB.ERASE(p_lobloc, P_amt);
p_file := BFILENAME('MYDUMP', 'Water.jpg');
DBMS_LOB.FILEOPEN(p_file);
DBMS_LOB.LOADFROMFILE(p_lobloc, p_file, DBMS_LOB.GETLENGTH(p_file));
COMMIT;
DBMS_LOB.FILECLOSE(p_file);
EXCEPTION
WHEN no_lob_data THEN
RAISE_APPLICATION_ERROR('-200001', 'NO BLOB DATA');
END;
/

PL/SQL procedure successfully completed.

更新前的数据

resserver.php?blogId=2483&resource=blob.JPG&mode=preview

更新后的数据

resserver.php?blogId=2483&resource=update_blob.JPG&mode=preview

在应用中可能通过存储过程传入更新的数据,可以直接通过DBMS_LOB.WRITE方法来更新字段。
具体可以参考包 DBMS_LOB。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/129805/viewspace-929634/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/129805/viewspace-929634/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值