📜  LOB规则和限制

📅  最后修改于: 2021-05-20 07:57:57             🧑  作者: Mango

本节提供有关LOB规则和限制的详细信息。

LOB列规则

LOB列确实具有以下规则和限制:

  1. 您不能将LOB指定为主键列。
  2. 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的语法。不支持其他用法。

  3. 不能包含LOB的,它们既可以包含一个或非键列。
  4. 以下定义的数据结构仅作为临时实例支持。您不能将这些实例存储在数据库表中:
    • 任何LOB类型的VARRAY
    • 包含LOB类型的任何类型的VARRAY ,例如具有LOB属性的对象类型
    • 任何LOB类型的ANYDATA
    • 包含LOB的任何类型的ANYDATA
  5. 您不能在查询的GROUP BY子句,查询的ORDER BY子句或聚合函数指定LOB列。
  6. 您不能在SELECT…UNIQUESELECT…DISTINCT语句或联接中指定LOB列。您可以在使用UNION或MINUS集合运算符的查询中或在SELECT…DISTINCT语句中指定对象类型列的LOB属性(如果该列的对象类型具有定义的MAP或ORDER BY函数) 。
  7. LOB段的第一个( INITIAL )范围必须至少包含三个数据库块。
  8. 创建AFTER UPDATE DML触发器时,不能在UPDATE OF子句中指定LOB列。
  9. 您不能将LOB列定义为索引键的一部分。但是,您可以在域索引的indextype规范中指定LOB列。
  10. INSERT…AS SELECT操作中,LOB允许您将最多4000字节的数据绑定到LOB列和属性。
  11. 如果一个表同时包含LONG和LOB列,则在同一SQL语句中不能将超过4000字节的数据绑定到LONG和LOB列,而可以将4000字节以上的数据绑定到LONG或LOB中的任何一个柱子。