oracle pl/sql 高级编程第五章 大对象类型

5.1 大对象数据类型
1. 大对象数据类型(LOB)可以存贮高达4GB的非结构化数据(如文本、图像、视频剪辑、声音信号等)。
对象 位置 描述
CLOB 内部 字符大型对象,保存多达4GB的单字节字符,其中的字符与数据库当前的
字符集对应
NCLOB 内部 国家特有字符大型对象,保存多达4GB的单字节字符或多字节字符,其中
的字符符合ORACLE数据库定义的国家特有字符集
BLOB 内部 二进制大型对象,保存多达4GB的原始(未结构化)的数据
BFILE 外部 二进制文件,存贮为操作系统可存取的文件,使ORACLE可以操纵它,这
些文件可以位于各种存贮设备上,包括DVD_ROW、CD_ROW和磁盘驱动器
外部指的是一个物理文件,即操作系统可以访问该文件,该文件并不存贮于数据库中,ORACLE使用它
来存贮文件名和文件位置;内部对象将一个定位器存贮在表的一个大型对象字段中,定位器指向数据在表
中的实际位置。因此,检索LOB对象时,只返回数据定位器,而不返回实际的数据项。
LOB 可以在整个会话期间都存在,或者是临时的。
局限性:
1) LOB 不能用于ORACLE高级表存贮技术,如群集;
2) LOB 不能出现在 GROUP BY、ORDER BY、SELECT DISTINCT、JOIN 语句或群集中。然而LOB
可以出现在使用 UNION ALL 的语句中;
3) 禁止分布式LOB;
4) LOB 不允许出现在VARRAY中。
2. 大对象数据类型与LONG型的区别:
1) 可以在单条记录中存贮多个LOB,而每条记录只能存贮一个LONG或LONG RAW数据;
2) LOB 能够具有用户定义的数据类型的属性,而LONG或LONG RAW不可以;
3) 只有LOB定位器能存贮在表字段中,BLOB和CLOB数据能够存贮在独立的表空间中,而BFILE 数据作
为外部文件存贮。对于LONG和LONG RAW 而言,整个值被存贮在表字段中;如果LOB小于3964字节,
则整个LOB被存贮在表字段中。
4) 访问LOB字段时,返回的是定位器;访问LONG或LONG RAW 时,返回的是整个值;
5) LOB 可多达4GB,而BFILE 的最大尺寸取决于操作系统,但不能超过 4GB,其有效取值范围为 1--
2**32-1;而LONG 或LONG RAW 不能超过2GB。
6) LOB 以随机、准确的方式操纵数据,其灵活性比 LONG 或 LONG RAW 数据更大;可以以随机的偏移
访问LOB,而LONG 必须从头开始访问,再到需要的位置。
7) 在本地和分布式环境中都可以使用LOB;而对LONG 或 LONG RAW 而言,这是不可能的。
8) TO_LOB 函数将已有的LONG 字段转换为LOB;
3. 定位器:
定位器被存贮在大型对象字段中,并指向数据存贮的实际位置。理解使用Oracle定位器时,在事务级
发生了什么事情非常重要。将LOB从一条记录中拷贝到下一条记录时,将创建一个定位器,并拷贝和贮存
来自源记录的所有数据。
如果删除一条记录,而没有将所有的内容拷贝到新记录中,则LOB中的所有数据都将丢失。删除内部
LOB时,定位器和LOB的内容都将被删除;删除外部BFILE时,文件依然存在,但是定位器被删除。
将内部LOB添加到表中时,需要创建一个定位器,方法是将数据赋给LOB字段,或者使用EMPTY_BLOB
或 EMPLY_CLOB;将外部 BFILE 添加到表中时,应该使用BFILENAME 将定位器赋给相应的字段。
使用 LOB 时,应该锁定它,以防止其他用户访问此 LOB。
PL/SQL 高级编程
第 15 页 共 15 页
5.2 在Oracle8i 数据库中使用外部文件:
1. 创建目录对象:
在能够访问外部文件之前,需要创建目录对象。目录对象将一个名称映射为一个指定的路径。语法如下:
CREATE OR REPLACE DIRECTORY dir_name AS src_path;
其中:
dir_name是与路径相关的目录对象的名称;
src_path是文件的物理路径。
SELECT * FROM all_directories; --查看路径信息;
2. BFILE 的局限性:
BFILE 数据类型不为 commit 和 rollback 提供事务性支持。同时,文件以只读方式打开,因此不
能以任何方式写或修改这些外部文件。
编辑init.ora 文件,并修改 session_max_open_files= 20语句以适应要求。当收到“打开文
件过多”的消息后,程序异常结束而不关闭所有已打开的文件。
3. BFILE 的属性:
BFILE数据类型是RAW型。
5.3 DBMS_LOB 包
BFILE 是Oracle 中唯一的外部数据类型,因此Oracle 提供了只能用于外部 LOB的函数:
名称 访问的对象 描述
BFILENAME BFILE 在PL/SQL块表中创建一个指向文件位置的指针(定位器)
COMPARE 所有的LOB 比较两个文件的全部或部分内容
FILECLOSE BFILE 关闭与BFILE定位器关联的文件
FILECLOSEALL BFILE 关闭打开的所有文件
FILEEXISTS BFILE 检查文件是否位于定位器指定是位置
FILEGETNAME BFILE 返回目录对象和BFILE的路径
FILEISOPEN BFILE 检查文件是否已经打开
FILEOPEN BFILE 真正打开文件
GETLENGTH 所有的LOB 返回LOB 的实际长度
INSTR 所有的LOB 在LOB 中搜索与指定的字符串匹配的模式
READ 所有的LOB 将LOB 中指定的内容读取到缓冲区中
SUBSTR 所有的LOB 返回参数指定的LOB的全部或部分内容
5.3.1 函数说明
1) BFILENAME 函数:
使用外部文件或将BFILE 的定位器插入到表中时,需要调用BFILENAME 函数,该函数创建一个指向
外部文件的定位器。BFILENAME 函数的语法如下:
FUNCTION BFILENAME( Directory_Object IN VARCAHR2, Filename IN VARCHAR2)
RETUTN BFILE_Locator;

你可能感兴趣的:(oracle pl/sql 高级编程第五章 大对象类型)