代码之家  ›  专栏  ›  技术社区  ›  jva

如何在非空字段中存储空值?

  •  3
  • jva  · 技术社区  · 16 年前

    若相关,则对表进行分区和索引组织。 Oracle版本是9.2

    3 回复  |  直到 16 年前
        1
  •  4
  •   Vincent Malgrat    16 年前

    这个 NOT NULL 列条件与其他约束不同:可以禁用NOTNULL约束,但不考虑该列

    SQL> CREATE TABLE tt (ID NUMBER NOT NULL);
    
    Table created
    
    SQL> SELECT column_name, nullable FROM user_tab_columns WHERE table_name = 'TT';
    
    COLUMN_NAME                    NULLABLE
    ------------------------------ --------
    ID                             N
    

    现在,如果我禁用约束并使用NOVALIDATE重新启用它,Oracle不会认为该列不可为空:

    SQL> SELECT constraint_name, search_condition
      2    FROM user_constraints WHERE table_name = 'TT';
    
    CONSTRAINT_NAME                SEARCH_CONDITION
    ------------------------------ ----------------------------
    SYS_C00786538                  "ID" IS NOT NULL
    
    SQL> ALTER TABLE tt MODIFY CONSTRAINT SYS_C00786538 DISABLE;
    
    Table altered
    
    SQL> ALTER TABLE tt MODIFY CONSTRAINT SYS_C00786538 ENABLE NOVALIDATE;
    
    Table altered
    
    SQL> SELECT column_name, nullable FROM user_tab_columns WHERE table_name = 'TT';
    
    COLUMN_NAME                    NULLABLE
    ------------------------------ --------
    ID                             Y
    

        2
  •  1
  •   Dani    16 年前

    检查约束是否已挂起/禁用

        3
  •  1
  •   DCookie    16 年前

    你确定这些列真的是空的?换言之:

    SELECT field
      FROM your_table
     WHERE not_null_field IS NULL;
    

    返回行?也许他们只是得到了不可显示的数据。。。