默认情况下生成为sql中varchar数据类型的标识

时间:2016-03-03 06:55:48

标签: sql oracle

我有一个表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。我也无法改变其数据类型。有什么工作吗?

4 个答案:

答案 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>