本节提供有关LOB规则和限制的详细信息。
LOB列规则
LOB列确实具有以下规则和限制:
- 您不能将LOB指定为主键列。
- Oracle数据库对远程LOB的支持有限。三种方式支持远程LOB。
- 创建表为选择或插入为选择。
CREATE TABLE t AS SELECT * FROM table1@remote_site; INSERT INTO t SELECT * FROM table1@remote_site; UPDATE t SET lobolm = (SELECT lobclm FROM table1@remote_site); INSERT INTO table1@remote_site SELECT * FROM local_table;
- 返回标量的远程LOB上的函数。支持具有LOB参数并返回标量数据类型的SQL和PL / SQL函数。其他DBMS_LOB API和SQL函数不支持与远程LOB列一起使用。例如,支持以下语句:
CREATE TABLE tab AS SELECT dbms_lob.Getlength@dbs2(clob_col) len FROM tab@dbs2; CREATE TABLE tab AS SELECT Length(clob_col) len FROM tab@dbs2;
另外,由于DBMS_LOB,因此不支持以下语句。SUBSTR返回LOB:
CREATE TABLE tab AS SELECT dbms_lob.Substr(clob_col) FROM tab@dbs2;
- 远程LOB的数据接口。您可以将二进制或字符缓冲区插入到远程BLOB或CLOB中,然后选择远程CLOB或BLOB到字符或二进制缓冲区中。例如(在PL / SQL中):
SELECT clobcol1, type1.blobattr INTO varchar_buf1, raw_buf2 FROM table1@remote_site;INSERT INTO table1@remotesite ( clobcol1, type1.blobattr ) VALUES varchar_buf1, raw_buf2;INSERT INTO table1@remotesite ( lobcol ) VALUES ( 'test' );UPDATE table1 SET lobcol = 'xxx';
这些是唯一受支持的涉及远程表中的LOB的语法。不支持其他用法。
- 创建表为选择或插入为选择。
- 簇不能包含LOB的,它们既可以包含一个键或非键列。
- 以下定义的数据结构仅作为临时实例支持。您不能将这些实例存储在数据库表中:
- 任何LOB类型的VARRAY
- 包含LOB类型的任何类型的VARRAY ,例如具有LOB属性的对象类型
- 任何LOB类型的ANYDATA
- 包含LOB的任何类型的ANYDATA
- 您不能在查询的GROUP BY子句,查询的ORDER BY子句或聚合函数指定LOB列。
- 您不能在SELECT…UNIQUE或SELECT…DISTINCT语句或联接中指定LOB列。您可以在使用UNION或MINUS集合运算符的查询中或在SELECT…DISTINCT语句中指定对象类型列的LOB属性(如果该列的对象类型具有定义的MAP或ORDER BY函数) 。
- LOB段的第一个( INITIAL )范围必须至少包含三个数据库块。
- 创建AFTER UPDATE DML触发器时,不能在UPDATE OF子句中指定LOB列。
- 您不能将LOB列定义为索引键的一部分。但是,您可以在域索引的indextype规范中指定LOB列。
- 在INSERT…AS SELECT操作中,LOB允许您将最多4000字节的数据绑定到LOB列和属性。
- 如果一个表同时包含LONG和LOB列,则在同一SQL语句中不能将超过4000字节的数据绑定到LONG和LOB列,而可以将4000字节以上的数据绑定到LONG或LOB中的任何一个柱子。