我有一个表xx_abc,数据库中存在数据。 我想在此表中添加列confi_name,这是必填列。 如果我像
那样添加此列ALTER TABLE xx_abc
ADD
( confi_NAME VARCHAR2(2000) NOT NULL);
我收到错误:
Error report:
SQL Error: ORA-01758: table must be empty to add mandatory (NOT NULL) column
01758. 00000 - "table must be empty to add mandatory (NOT NULL) column"
所以我将它转换为
ALTER TABLE xx_abc
ADD
( confi_name VARCHAR2(2000) generated by default as identity (START WITH 2, INCREMENT BY 1)
但这也是一个错误,因为defaut生成的必须是int数据类型。我基本上想要使用每行唯一的值来生成config_name。我也无法改变其数据类型。有什么工作吗?
答案 0 :(得分:0)
首先将列添加为可为空。 然后使用每行中的默认值更新该列。 然后将列设置为NOT NULL。
答案 1 :(得分:0)
正如您所提到的,该表已经有了它们的值。如果要添加另一个具有“not null”属性的列,请确保插入的值等于前一列的值(行)数,因为您已将其设置为“not null”作为其属性。另一种方法是首先使用“not null”,然后在已经为列提供足够的值时将属性设置为“not null”。
答案 2 :(得分:0)
在添加约束之前,您必须为现有行设置默认值。
1)修改表格
ALTER TABLE xx_abc
ADD
( confi_NAME VARCHAR2(2000));
2)设置默认值
update XX_ABC set confi_NAME = 'DEFAULT';
COMMIT;
3)添加约束
alter table XX_ABC add check (confi_NAME is not null);
答案 3 :(得分:0)
现有表格:
SQL> CREATE TABLE t(A VARCHAR2(10));
Table created.
SQL> INSERT INTO t VALUES('a');
1 row created.
SQL> INSERT INTO t VALUES('b');
1 row created.
SQL> INSERT INTO t VALUES('c');
1 row created.
SQL> COMMIT;
Commit complete.
添加新列:
SQL> ALTER TABLE t ADD (b VARCHAR2(10));
Table altered.
更新行
SQL> UPDATE t SET b = 'newvalue';
3 rows updated.
添加NOT NULL约束:
SQL> ALTER TABLE t MODIFY b NOT NULL;
Table altered.
SQL> desc t
Name Null? Type
----------------------------------------- -------- -------------
A VARCHAR2(10)
B NOT NULL VARCHAR2(10)
SQL>