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
nPos number(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<nOffset) then
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;
分享到:
相关推荐
Oracle中的LOB(Large Object)是用于存储大量非结构化数据的数据类型...总之,Oracle的LOB数据类型为存储和管理大型非结构化数据提供了强大支持,通过合理的表设计和使用`DBMS_LOB`包,可以高效地处理这些大数据对象。
通过阅读如“Oracle中的包――DBMS_LOB(一).pdf”、“ORACLE LOB大对象处理.pdf”和“DBMS_LOB包的使用.pdf”等资料,可以深入理解这些概念,并通过实践来熟练掌握。同时,“dbms_lob包学习笔记之二:append和...
ASSM 可以有效地处理 LOB 对象的碎片问题,从而提高性能。 3. **索引组织表**:对于频繁查询的 LOB 字段,考虑使用索引组织表(IOT)。这样可以在查询时避免额外的表扫描,提高查询效率。 4. **并行操作**:利用...
《使用JDBC数据接口存取Oracle LOB(大对象)》这篇文章主要探讨了如何通过Java...对于Java开发者和Oracle数据库管理员来说,这篇文章提供了宝贵的理论知识和实践经验,有助于他们在实际项目中更好地处理大对象数据。
通过以上介绍,我们可以了解到Oracle的大对象处理涉及数据存储、读取、更新、删除以及性能优化等多个方面。在实际开发中,根据具体需求选择合适的LOB类型和管理策略,能够有效地处理和存储大量非结构化数据。
在本文中,我们将深入探讨如何在Java环境下,利用Spring和Hibernate框架处理Oracle数据库中的LOB(Large Object)字段。LOB字段通常用于存储大体积的数据,如文本、图片或视频。在实际开发中,处理这类数据时可能会...
而JAVA编程语言的方法则提供了更高的灵活性和效率,特别是在处理大数据量时更为突出。因此,数据库管理员和开发者在面临大对象数据存取的抉择时,应根据实际需求和资源状况,选择最合适的实现路径。此外,本研究也...
本文通过Java代码示例解释了如何在Oracle数据库中操作LOB对象,尤其是CLOB类型。 1. **建立数据库连接** 在Java程序中,我们首先需要导入必要的JDBC库,并设置Oracle驱动程序、数据库连接URL、用户名和密码。`...
使用OCI,开发者可以直接操纵LOB对象,包括读取、写入和更新数据。优点是性能高效,可以直接控制数据库操作,但缺点是学习曲线陡峭,需要深入理解Oracle的内部机制。 2. Pro*C/C++:这是一种预编译器,将SQL和PL/...
Oracle数据库在存储和管理大对象非结构化数据方面扮演了重要角色,特别是其LOB(Large Object)数据类型,包括BLOB(Binary Large Object)和CLOB(Character Large Object)。BLOB类型用于存储二进制数据,如图片、...
处理LOB数据时,Oracle提供了一个强大的DBMS_LOB包,这个包简化了对内部LOB对象(BLOB和CLOB)的操作,包括读取和写入。然而,对于外部LOB对象BFILE,只能进行读操作,而写操作应该通过PL/SQL程序段来完成。 以下是...
为了解决这一问题,Oracle数据库引入了LOB(Large Objects,大对象)数据类型来存储大量二进制和文本数据。本文旨在详细介绍如何在Oracle数据库中使用和维护LOB数据类型。 #### LOB概述 在Oracle数据库中,LOB是一...
- 使用`OCINewDescriptor()`生成一个本地LOB对象的描述符,并指定类型为`OCI_D_LOB`。 - 使用`OCIBindByName()`将生成的LOB对象绑定到SQL语句中的LOB字段。 - 执行SQL语句。 - 给LOB对象赋值,例如通过`savefile...
Oracle从8i中使用了LOB(大对象)这种特殊的数据类型,实现了对这些数据的存储。 LOB是以对象的形式出现的,不同于以往的普通数据结构,因此具有对象的属性和方法,可以使用Java这种基于对象的语言进行操作。一个...
标题中的"C++Builder程序对Oracle数据库巨型对象类型的处理"指的是使用C++Builder这一集成开发环境(IDE)来操作Oracle数据库中的LOB(Large Object)类型数据,主要包括CLOB(Character Large Object)和BLOB...
### Oracle数据库对象导出脚本知识点解析 #### 标题:Oracle数据库对象导出脚本 此标题指明了本文档的主题是关于如何通过编写脚本来导出Oracle数据库中的对象定义。在Oracle数据库中,对象是指数据库表、视图、...
Oracle的`OracleLob`类提供了诸如`CreateTemporary`、`CopyTo`、`Trim`等方法,以支持这些高级功能。 总之,通过ADO.NET和OracleClient,开发者可以轻松地在C#应用程序中处理Oracle数据库中的Blob和Clob大对象,...