繁体   English   中英

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

[英]generated by default as identity for varchar data type in sql

我有一个表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具有对于每一行都是唯一的值。 我也不能更改其数据类型。 有什么解决方法吗?

首先将该列添加为可为空。 然后在每一行中使用默认值更新该列。 然后将列设置为NOT NULL。

如您所提到的,该表已经具有它们的值。 如果要添加具有“ not null”属性的另一列,请确保插入的值等于前几列的值(行)数,因为您已将其设置为“ not null”作为其属性。 另一种方法是先不使用“ not null”,然后在您已经为该列准备好足够的值之后将属性设置为“ not null”。

您必须在添加约束之前为现有行设置默认值。

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);

现有表:

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM