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数据。
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|