0、large object
oracle8中有4种lob
- blob:binary large object
- clob:character large object
- nclob:固定长度的多字节character large object
- bfile:db外部的二进制文件
它们分为两类:
内部lob:存放在db内部,包括blob,clob,bclob
外部文件:存放在db外面,就是bfile
要注意的是oracle8不自动转换这些类型的数据。
1、long和lob的比较
long/long raw lob
--------------------------------------------------
表中只能由一个列 可以有多列
最大2g 最大4g
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,只在列中存放位置。
3、内部lob
就是存放在db内部的lob,包括blob,clob,nclob。它们可以是
用户自定义的类型中的属性
表中某列
sql 变量
程序host变量
pl/sql中的变量、参数、返回值
内部lob可以使用oracle的并发机制、redo log、recovery机制。
blob被oracle8解释为二进制位流,类似long raw。
clob解释为单字节字符流
nclob是固定的多字节字符流,基于db national字符集的字节长度。
例子:
create type picture_typ as object (image blob);
create table person_tab
( pname varchar2(20),
resume clob,
picture picture_typ
);
上面的语句完成后,数据将存放在5个物理segment中。
- table person_tab在缺省tablespace,
- resume存放的lob segment
- picture存放的lob segment
- 标示resume存放位置的lob index segment
- 标示picture存放位置的lob index segment
lob index是隐式创建的。
当insert或者object cache中的object刷新到server时,lob生成。可以使用dbms_lob包和oci来处理lob。当row删除时,相应的内部lob也会删除。update必须处理整个lob值,不能update其中的一部分。
4、内部lob的存储参数
具体语法可以参见oracle文档,
lob ( lob项,...) store as lob_segment_name
chunk integer
pctversion integer
cache
nocache logging/nologging
tablespace tablespace_name
storage storage子句
index index字句
lob_segment_name:缺省式lob$n
chunk:连续分配在一起的block数目,存放连续的lob数据。这些chunk的数据存放在lob index里面,使用内部lob标示和lob值作为键。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器