日期:2014-05-16  浏览次数:20506 次

oracle对大对象类型操作:blob,clob,nclob,bfile

3-4 Lob类型
??????? 13.4.1 基本介绍
??????? Oracle和plsql都支持lob(large object) 类型,用来存储大数量数据,如图像文件,声音文件等。Oracle 9i realse2支持存储最大为4g的数据,oracle 10g realse1支持最大8到128万亿字节的数据存储,依赖于你的db的block size。
??????? 在plsql中可以申明的lob类型的变量如下:
类型??????? 描述
BFILE??????? 二进制文件,存储在数据库外的操作系统文件,只读的。把此文件当二进制处理。
BLOB??????? 二进制大对象。存储在数据库里的大对象,一般是图像声音等文件。
CLOB??????? 字符型大对象。一般存储大数量文本信息。存储单字节,固定宽度的数据。
NCLOB??????? 字节字符大对象。存储单字节大块,多字节固定宽度,多字节变宽度数据。
Oracle将lob分类为两种:
1.存储在数据库里的,参与数据库的事务。BLOB,CLOB,NCCLOB。
2.存储在数据库外的BFILE,不参与数据库的事务,也就是不能rollback或commit等,它依赖于文件系统的数据完整性。
LONG和LONG RAW这两种数据类型也是存储字符的,但是有系列的问题,不建议使用,这里也就不讨论了。
13.4.2 LOB的使用
本部分不讨论lob的所有细节,只讨论lob的基本原理和在plsql中的基本使用,为plsql开发使用lob提供一个基础性指导。
本部分使用的表是:
/**
table script
**/
CREATE TABLE waterfalls (
?????? falls_name VARCHAR2(80),--name
?????? falls_photo BLOB,--照片
?????? falls_directions CLOB,--文字
?????? falls_description NCLOB,--文字
?????? falls_web_page BFILE);--指向外部的html页面
/??????
??????? 这个表我们并不需要clob和nclob两个,只取一就可以,这里全部定义只是为了演示使用。
1.??????? 理解LOB的Locator
表中的Lob类型的列中存储的只是存储指向数据库中实际存储lob数据的一个指针。
在plsql中申明了一个lob类型的变量,然后从数据库中查询一个lob类型的值分配给变量,也只是将指针复制给了它,那么这个变量也会指向数据库中实际存放lob数据的地方。如:
--understanding lob locators
DECLARE
?????? photo BLOB;
??? BEGIN
?????? SELECT falls_photo
???????? INTO photo
???????? FROM waterfalls
??????? WHERE falls_name='Dryer Hose';
见下图:
Lob工作原理图解
??????? 从上面的图可以看出,要处理lob数据,必须先获得lob locators。我们可以通过一个select语句获取,当赋值给lob变量的时候,它也获得同样的lob locators。我们在plsql中处理可以使用dbms_lob包,里面内置了很多过程和函数来读取和修改我们的lob数据。下面给出处理lob数据的一般方法。
1.??????? 通过select语句获取一个lob locator。
2.??????? 通过调用dbms_lob.open打开lob。
3.??????? 调用dbms_lob.getchunksize获得最佳读写lob值。
4.??????? 调用dbms_lob.getlength获取lob数据的字节值。
5.??????? 调用dbms_lob.read获取lob数据。