oracle怎么删除lob对象,ORACLE LOB大对象处理

Declare

varC clob;

vRStr varchar2(1000);

ln number(4);

Strt number(4);

sStrt number(4);

differ1 number(4);

differ2 number(4);

vWStr varchar2(1000);

Begin

select DESCRLONG

into varC

from PSMSGCATDEFN

where MESSAGE_SET_NBR = 3000

AND MESSAGE_NBR = '473'

FOR UPDATE;

ln := DBMS_LOB.GetLength(varC);

Strt := 1;

vWStr := REPLACE(REPLACE(varC, '受抚养人/受益人', '家庭成员'),

'受抚养人',

'家庭成员');

sStrt := DBMS_LOB.GetLength(vWStr);

DBMS_output.put_line('未改之前varC: ' || varC);

DBMS_output.put_line('replace 的vWStr : ' || vWStr);

/*===================================

当源数据的长度与目标数据的长度相等,

则直接 Write过去(覆盖掉目标数据)。

===================================*/

if ln=sStrt then

DBMS_output.put_line('ln=sStrt ');

DBMS_LOB.Write(varC, ln,1,vWStr);

end if;

/*====================================

当源数据的长度”小于“目标数据的长度,

则先 Write源数据过去(先覆盖掉目标数

据的一部分(覆盖长度=源数据长度)),

然后,将目标数据长于源数据的部分

Erase(删除)掉。

=====================================*/

if ln>sStrt then

DBMS_output.put_line('ln>sStrt ');

differ1:=ln-sStrt;

differ2:=sStrt+1;

DBMS_LOB.Write(varC, sStrt,1,vWStr);

DBMS_LOB.Erase(varC, differ1, differ2);

end if;

/*=====================================

当源数据的长度“大于”目标数据的长度,

则取源数据一部分数据,先 Write过去(取

的规则:从源数据起始位置开始,到与目标

数据长度相等的位置为止),然后,将源数

据余下的部分 Append到目标数据后面。

======================================*/

if ln

DBMS_output.put_line('ln

differ1:=sStrt-ln;

differ2:=ln+1;

DBMS_LOB.Write(varC, ln,1,DBMS_LOB.SubStr(vWStr,ln,1));

DBMS_LOB.Append(varC, DBMS_LOB.SubStr(vWStr,differ1,differ2));

end if;

DBMS_output.put_line('修改后的varC : ' || vWStr);

UPDATE PSMSGCATDEFN SET MESSAGE_TEXT=REPLACE(MESSAGE_TEXT,'受抚养人','家庭成员') where MESSAGE_SET_NBR = 3000 AND MESSAGE_NBR='473';

commit;

End;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值