3

为什么我收到此错误?
在 DDL 表中,我只有 2 列,id (number) 和 name (varchar)

ALTER TABLE mytable ADD SUSPEND date NOT NULL


ORA-01758: 表必须为空才能添加必填 (NOT NULL) 列 ORA-06512: 在第 7 行

4

3 回答 3

9

ORA-01758:表必须为空才能添加必填 (NOT NULL) 列 ORA-06512: 在第 7 行

你的桌子空的吗?我想不是。

可能有一种解决方法,包括将列添加为可为空,然后用非 NULL 值填充每一行,将列更改为not null.

或者,由于问题是这些当前行将被赋予 NULL 作为默认值,并且列不允许为 NULL,因此您也可以使用默认值绕过它。来自Oracle 文档

但是,如果您提供默认值,则可以将具有 NOT NULL 约束的列添加到现有表中;否则,执行 ALTER TABLE 语句时会引发异常。

这是一个小提琴,你怎么能做到

于 2013-06-14T12:21:18.003 回答
1

将来的日期是否可以作为临时违约接受?如果是这样,这将起作用:

ALTER TABLE MYTABLE ADD (SUSPEND_DATE DATE DEFAULT(TO_DATE('21000101', 'YYYYMMDD'))
CONSTRAINT SUSPEND_DATE_NOT_NULL NOT NULL);

于 2013-06-14T17:19:42.160 回答
0

如果表已经包含记录,则表将不允许添加“非空”列。如果您需要相同,则为列设置默认值或截断表,然后尝试。

于 2013-06-14T12:25:50.027 回答