使用alter和NOT NULL约束创建的列

时间:2015-05-22 05:59:35

标签: sql database oracle

我们创建了一个表格。在将数据填充到其中之后,我们更改了表格并创建了一个新列,例如“城市”。创建此列使其成为NOT NULL后,我们没有填充其中的任何数据。那么在CITY列中这种情况下行的值是什么?

1 个答案:

答案 0 :(得分:1)

  

我们创建了一个表格。在将数据填充到其中之后,我们更改了表并创建了一个新列,即“CITY”。创建此列使其成为NOT NULL后,我们没有填充其中的任何数据。那么在CITY列中这种情况下行的值是什么?

不,你不能。

如果您直接尝试将 NOT NULL 约束的新列添加到包含行的现有表,则只会出现以下错误:

ORA-01758: table must be empty to add mandatory (NOT NULL) column

例如,

SQL> CREATE TABLE t AS SELECT LEVEL a FROM dual CONNECT BY LEVEL <=10;

Table created.

SQL>
SQL> ALTER TABLE t ADD (b NUMBER NOT NULL);
ALTER TABLE t ADD (b NUMBER NOT NULL)
            *
ERROR at line 1:
ORA-01758: table must be empty to add mandatory (NOT NULL) column


SQL>

如果您尝试 ALTER 表和MODIFY添加NOT NULL约束,那么您将收到以下错误:

ORA-02296: cannot enable (LALIT.B_C) - null values found

例如,

SQL> DROP TABLE t PURGE;

Table dropped.

SQL>
SQL> CREATE TABLE t AS SELECT LEVEL a FROM dual CONNECT BY LEVEL <=10;

Table created.

SQL>
SQL> ALTER TABLE t ADD (b NUMBER);

Table altered.

SQL>
SQL> ALTER TABLE t
  2  MODIFY (b NUMBER CONSTRAINT b_c NOT NULL);
MODIFY (b NUMBER CONSTRAINT b_c NOT NULL)
                            *
ERROR at line 2:
ORA-02296: cannot enable (LALIT.B_C) - null values found

因此,您无法在具有行的现有表上创建具有NOT NULL约束的新列。该表必须为空。