[英]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.