`

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
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;
分享到:
评论

相关推荐

    ORACLELOB大对象处理[定义].pdf

    Oracle中的LOB(Large Object)是用于存储大量非结构化数据的数据类型...总之,Oracle的LOB数据类型为存储和管理大型非结构化数据提供了强大支持,通过合理的表设计和使用`DBMS_LOB`包,可以高效地处理这些大数据对象。

    oracle dbms_lob

    通过阅读如“Oracle中的包――DBMS_LOB(一).pdf”、“ORACLE LOB大对象处理.pdf”和“DBMS_LOB包的使用.pdf”等资料,可以深入理解这些概念,并通过实践来熟练掌握。同时,“dbms_lob包学习笔记之二:append和...

    Oracle Lob Performance Guidelines

    ASSM 可以有效地处理 LOB 对象的碎片问题,从而提高性能。 3. **索引组织表**:对于频繁查询的 LOB 字段,考虑使用索引组织表(IOT)。这样可以在查询时避免额外的表扫描,提高查询效率。 4. **并行操作**:利用...

    使用JDBC数据接口存取Oracle LOB(大对象).pdf

    《使用JDBC数据接口存取Oracle LOB(大对象)》这篇文章主要探讨了如何通过Java...对于Java开发者和Oracle数据库管理员来说,这篇文章提供了宝贵的理论知识和实践经验,有助于他们在实际项目中更好地处理大对象数据。

    Oracle的大对象处理(代码加注释)

    通过以上介绍,我们可以了解到Oracle的大对象处理涉及数据存储、读取、更新、删除以及性能优化等多个方面。在实际开发中,根据具体需求选择合适的LOB类型和管理策略,能够有效地处理和存储大量非结构化数据。

    Spring+Hibernate处理Oracle lob字段(一)

    在本文中,我们将深入探讨如何在Java环境下,利用Spring和Hibernate框架处理Oracle数据库中的LOB(Large Object)字段。LOB字段通常用于存储大体积的数据,如文本、图片或视频。在实际开发中,处理这类数据时可能会...

    Oracle数据库大对象数据存取的两种实现方法及时间性能比较.pdf

    而JAVA编程语言的方法则提供了更高的灵活性和效率,特别是在处理大数据量时更为突出。因此,数据库管理员和开发者在面临大对象数据存取的抉择时,应根据实际需求和资源状况,选择最合适的实现路径。此外,本研究也...

    Oracle大型数据对象LOB几种情况的示范类

    本文通过Java代码示例解释了如何在Oracle数据库中操作LOB对象,尤其是CLOB类型。 1. **建立数据库连接** 在Java程序中,我们首先需要导入必要的JDBC库,并设置Oracle驱动程序、数据库连接URL、用户名和密码。`...

    基于VC的Oracle LOB数据库访问技术.pdf

    使用OCI,开发者可以直接操纵LOB对象,包括读取、写入和更新数据。优点是性能高效,可以直接控制数据库操作,但缺点是学习曲线陡峭,需要深入理解Oracle的内部机制。 2. Pro*C/C++:这是一种预编译器,将SQL和PL/...

    基于.NET的Oracle LOB数据库访问技术.pdf

    Oracle数据库在存储和管理大对象非结构化数据方面扮演了重要角色,特别是其LOB(Large Object)数据类型,包括BLOB(Binary Large Object)和CLOB(Character Large Object)。BLOB类型用于存储二进制数据,如图片、...

    Oracle中对LOB对象的操作.pdf

    处理LOB数据时,Oracle提供了一个强大的DBMS_LOB包,这个包简化了对内部LOB对象(BLOB和CLOB)的操作,包括读取和写入。然而,对于外部LOB对象BFILE,只能进行读操作,而写操作应该通过PL/SQL程序段来完成。 以下是...

    本文档主要介绍如何对LOB字段进行处理

    为了解决这一问题,Oracle数据库引入了LOB(Large Objects,大对象)数据类型来存储大量二进制和文本数据。本文旨在详细介绍如何在Oracle数据库中使用和维护LOB数据类型。 #### LOB概述 在Oracle数据库中,LOB是一...

    用PHP操纵Oracle的LOB类型的数据

    - 使用`OCINewDescriptor()`生成一个本地LOB对象的描述符,并指定类型为`OCI_D_LOB`。 - 使用`OCIBindByName()`将生成的LOB对象绑定到SQL语句中的LOB字段。 - 执行SQL语句。 - 给LOB对象赋值,例如通过`savefile...

    利用Java程序实现Oracle数据库中大对象的存取.pdf

    Oracle从8i中使用了LOB(大对象)这种特殊的数据类型,实现了对这些数据的存储。 LOB是以对象的形式出现的,不同于以往的普通数据结构,因此具有对象的属性和方法,可以使用Java这种基于对象的语言进行操作。一个...

    C Builder程序对Oracle数据库巨型对象类型的处理.pdf

    标题中的"C++Builder程序对Oracle数据库巨型对象类型的处理"指的是使用C++Builder这一集成开发环境(IDE)来操作Oracle数据库中的LOB(Large Object)类型数据,主要包括CLOB(Character Large Object)和BLOB...

    oracle数据库对象导出脚本

    ### Oracle数据库对象导出脚本知识点解析 #### 标题:Oracle数据库对象导出脚本 此标题指明了本文档的主题是关于如何通过编写脚本来导出Oracle数据库中的对象定义。在Oracle数据库中,对象是指数据库表、视图、...

    ado.net读写Oracle大对象

    Oracle的`OracleLob`类提供了诸如`CreateTemporary`、`CopyTo`、`Trim`等方法,以支持这些高级功能。 总之,通过ADO.NET和OracleClient,开发者可以轻松地在C#应用程序中处理Oracle数据库中的Blob和Clob大对象,...

Global site tag (gtag.js) - Google Analytics