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

ORACLE LOB大对象处理

主要是用来存储大量数据的数据库字段,最大可以存储4G字节的非结构化数据。

主要介绍字符类型和二进制文件类型LOB数据的存储,单独介绍二进制类型LOB数据的存储。

一.Oracle中的LOB数据类型分类

BLOB: 二进制lob,为二进制数据,最长可达4GB,存贮在数据库中

CLOB: 字符lob,字符数据,最长可以达到4GB,存贮在数据库中。

BFILE: 二进制文件;存贮在数据库之外的只读型二进制数据,最大长度由操作系统限制。

NCLOB: 支持对字节字符集合(nultibyte characterset)的一个clob列.

ORACLE中对Lob数据类型的DML操作,都包含在dbms_lob包。

二 介绍一下关于DBMS_LOB包的四组方法:

1. LOB的I/O操作:Append,READ,WRITE,EARSE,OPEN,CLOSE

2. COVERTTOCLOB/COVERTTOBLOB

3. LOADFROMFILE/LOADBLOBFROMFILE/LOADCLOBFROMFILE

4. COMPARE,COPY,INSTR,SUBSTR,GETLENGTH,GETCHUNKSIZE,GET_STORAGE_LIMIT

下面做了一个实例:

/* 从CLOB中读取一行数据,

注: 本函数处理3类换行:ascii码为 1310, 10, 13 */

*/

function F_READ_LINE_FROM_CLOB

(

clobLoc in CLOB, /*传入的CLOB对象*/

nOffset in out number /*起始偏移位置,第一次使用时为“1”,

函数调用后自动移到下一行的起始位置,若

输出偏移量大于CLOB长度,表示已经结束*/

)

return varchar2

/*读取到的数据*/

is

nPosnumber(10);

nPos_13 number(10);

sLine varchar2(8192):=null;/*最大行长*/

nLineSize integer;

nLobLength number;

M_step integer:=1; /*换行的长度默认为1*/

begin

nLobLength:=dbms_lob.getlength(clobLoc);/*判断长度*/

if(nLobLength

return sLine;/*若偏移量大于长度,结束*/

end if;

nPos :=dbms_lob.instr(clobLoc,chr(10),nOffset,1);/*定位换行符位置*/

if(nPos>0) then/*找到换行*/

/*-----处理 1310 和 10 两种情况----*/

/*若chr(10)的前一个符号是chr(13),则跳过该符号*/

if(nLobLength>=nOffset) then

if(DBMS_LOB.SUBSTR(clobLoc,1,nPos-1)=chr(13)) then

nPos :=nPos-1;

m_step:=2;

end if;

end if;

nLineSize:=nPos-nOffset;/*获取本行长度*/

if(nLineSize>0) then/*若长度非零,则读取,放入sLine中*/

dbms_lob.read(clobLoc,nLineSize,nOffset,sLine);

end if;

nOffset:=nPos+m_step;/*定位下次的偏移量位置*/

m_step :=1;/*换行的长度默认为1*/

else/*未找到回车符号,则读取剩下的数据*/

nPos_13 :=dbms_lob.instr(clobLoc,chr(13),nOffset,1);/*定位换行符位置*/

if (nPos_13>0) then

/*-----处理 13 情况----*/

nLineSize:=nPos_13-nOffset;/*获取本行长度*/

if(nLineSize>0) then /*若长度非零,则读取,放入sLine中*/

dbms_lob.read(clobLoc,nLineSize,nOffset,sLine);

end if;

nOffset:=nPos_13+m_step; /*定位下次的偏移量位置*/

else

nLineSize:=nLobLength-nOffset+1;

if(nLineSize>0 and nLineSize<=8192) then

dbms_lob.read(clobLoc,nLineSize,nOffset,sLine);

end if;

nOffset:=nLobLength+1;

end if;

end if;

return (sLine);/*返回数据*/

end;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值