在 Oracle9i Release 2 之前,LOB 最多只能存储 4G 数据;从Oracle10g Release 1 开始,可以存储 8-128T 的数据,取决于你的数据库的块大小。
PL/SQL中你可以定义如下的 LOB 字段类型:
(1)BFILE:二进制文件。定义一个 BFILE 变量,它指向操作系统的一个文件,Oracle会将其视为二进制数据进行处理。该文件存储于数据库外。
(2)BLOB:二进制大对象。定义一个 BLOB 变量,它指向一个二进制大对象的位置。该二进制大对象存储于数据库中。
(3)CLOB:字符型大对象。定义一个 CLOB 变量,该字符型大对象存储于数据库中。
(4)NCLOB:National Language Support (NLS) character large object. Declares a variable that holds a LOB locator pointing to a large block of single-byte, fixed-width multibyte, or variable-width multibyte character data stored inside the database. 用来存储多字节的字符数据(定宽的多字节国家字符集数据)。
存储于 Oracle 数据库内的大字段类型(如blob,clob,nclob等),可以参与 Oracle 的事务处理。而存储于数据库外的大字段类型(如bfile)则不能参与 Oracle 的事务处理,不能被提交和回滚,只能依据文件系统来保证数据的完整性。
至于LONG和LONG RAW,Oracle已经不推荐使用了。它们的存在,只是为了向前兼容。你应该从LONG 转向BLOG和CLOB, 如果你的系统中存在 LOGN 类型的字段,可以参考《Application Developer''s Guide》中的Large Objects 将 LONG 字段转为 LOB 字段。
1、LONG和LOB的比较
LONG/LONG RAW LOB
---------------------------------------------------------
表中只能有一个列 可以有多列
最大2G 最大4G(10g更大)
SELECT返回值 SELECT返回指针
存放在DB内 可以在DB内或者外
不支持OBJECT类型 支持
顺序存取 随机存取
----------------------------------------------------------
备注: NCLOB不支持OBJECT类型
LOB小于4000字节时是内部存放
2、LOB解析
LOB有两个不同的部分
- LOB值: LOB代表的数据
- LOB指针:LOB存放数据的位置
LOB列内部不存放数据,而是LOB值的位置。当创建内部LOB时,值存放在LOB SEGMENT中,指向OUT-OF-LIN数据的指针放在列中。对外部LOB,只在列中存放位置。
比如下面的建表中BLOB字段指针存放在PDM_DATA字段中,但是真正的LOB值(二进制文件内容)存放在用户定义LOB_TS表空间的LOB SEGMENT中 :
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-448910/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-448910/
742

被折叠的 条评论
为什么被折叠?



