Oracle PL/SQL 程序设计读书笔记 - 第13章 其他数据类型
Oracle PL/SQL 程序设计读书笔记 - 第13章 其他数据类型
13.1 BOLEAN类型
13.2 RAW数据类型
我们可以用RAW数据类型保存和操作量比较少量的二进制数据。和VARCHAR2以及其他字符类型不同的是,在数据库和PL/SQL程序音来回传递RAW数据时,不会发生任何字符集的转换。
variable_name RAW(maximun_size)
maximun_size的取值范围从1到32767。而数据库中的RAW列最多只能容纳2000个字节。
13.3 UROWID和ROWID数据类型
ROWID7就是一个行标识符,用来表示数据库表中一行记录的物理地址的二进制值。 UROWID中的U代表能用的,一个UROWID变量可以用于任何类型的表的任何ROWID。
注:一个表中的ROWID是可以改变的。在oracle8i之后出现的这个特性。所以通常不建议在我们的应用程序中使用ROWID。
13.4 LOB数据类型
LOB可以保存大量(从8到128TB)的二进制数据。 内部的LOB(包括BLOB,CLOB,NCLOB)都保存在数据库内部,并且参与到数据库事务中。外部的LOB(BFILE)代表的保存在数据库表空间以外的操作系统中的二进制文件。外部LOB不参与到事务中。
13.5 使用LOB
13.5.1 理解LOB定位符
数据库的LOB列存储的是LOB定位符,这些定位符又指向保存在数据库其他地方的LOB段的真实数据。
13.5.2 LOB的空和NULL
一个空的LOB是指LOB定位符没有指向任何LOB数据。它和NULL LOB不同,后者是指LOB列中(或者变量)连LOB定位符都没有。我们必须首先用IS NULL测试来检查是否存在定位符,然后在检查长度非零。
13.5.3 向LOB中写数据
- DBMS_LOB.WRITE 向LOB中随机的写入数据
- DBMS_LOB.WRITEAPPEND 向LOB的末尾追加数据
13.5.3 读取LOB数据
- DBMS_LOB.READ 读取LOB数据
13.5.5 BFILE不同于其他
- BFILE的值保存在一个操作系统文件中,而不是数据库内部。
- BFILE不会参与到事务中,然而,对于BFILE定位符的修改可以回滚或者提交。
-
一般而言,在数据库内部,我们对BFILE口令能读取。
-
DBMS_LOB.LOADCLOBFROMFILE 从一个BFILE中加载到CLOB
- DBMS_LOB.LOADBLOBFROMFILE 从一个BFILE中加载到BLOB。
13.5.6 SecureFiles和BasicFiles
SecureFiles是从Oracle数据库的11g引入的,在旧的LOB实现方式上提供了许多改进,后者叫做BasicFiles。
13.5.7 临时LOB
-
创建一个临时LOB
DBMSLOB.CREATEMPORARY ( lobloc IN OUT NOCOPY [ BLOB | CLOB CHARACTER SET ANY_CS ], cache IN BOOLEAN, dur IN PLSINTEGER := DBMSLOB.SESSION);
-
释放临时LOB
DBMSLOB.FREETEMPORARY ( lobloc IN OUT NOCOPY [ BLOB | CLOB CHARACTER SET ANY_CS ]);
-
检查一个LOB是否是临时的
函数ISTEMPORARY可以告诉我们一个LOB定位符指向的到底是一个临时LOB还是一个持久化的LOB。返回1说明是一个临时LOB,返回0说明不是。
DBMS_LOB.ISTEMPORARY (
lob_loc IN OUT NOCOPY [ BLOB | CLOB CHARACTER SET ANY_CS ])