oracle ORA-01440:要修改的列必须为空,以降低精度或刻度

k4aesqcs  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(211)

我有一个名为Products的Oracle表。它有一个类型为NUMBER的ID列。
我想将其类型更改为Number(20, 0),但它给了我这个错误:

ORA-01440: column to be modified must be empty to decrease precision or scale

所以我用了这个脚本:

alter table Products add ID_TEMP NUMBER(20,0);

update Products set ID_TEMP = ID;

update Products set ID = NULL;

alter table Products modify ID NUMBER(20,0);

update Products set ID = ID_TEMP;

alter table Products drop column ID_TEMP;

但它抱怨说,

cannot update ID to NULL

这是合理的,因为它是不可空的主键。
如何将其数据类型从Number更改为Number(20, 0)

baubqpgj

baubqpgj1#

检查ID是否是主键。如果是,则不能将其修改为可空或插入NULL值。
因此,最好在执行“UPDATE ID_TEMP WITH VALUES OF ID”后执行以下操作
删除ID列及其主键约束。RENAME THE COLUMN ID_TEMP TO ID然后将ID列设置为主键。示例如下:

ALTER TABLE Products ADD ID_TEMP NUMBER(20,0);
 UPDATE PRODUCTS SET ID_TEMP = ID;
 ALTER TABLE PRODUCTS DROP COLUMN ID;
 ALTER TABLE PRODUCTS DROP CONSTRAINT ID_PK;
 ALTER TABLE PRODUCTS RENAME COLUMN PRODUCTS.ID_TEMP TO ID;
 ALTER TABLE PRODUCTS ADD CONSTRAINT ID_PK PRIMARY KEY (ID);

相关问题