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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORA-01440:要修改的列必须为空,以降低精度或小数位数相关的知识,希望对你有一定的参考价值。

我有一个名为Products的Oracle表。它的ID列的类型为NUMBER

我想将其类型更改为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)

答案

检查ID是否为主键。如果是,则不能将其修改为可为空或向其中插入NULL值。

因此最好在执行'UPDATE ID_TEMP WITH IDS OF VALUES OF ID'之后执行以下操作:>

丢弃ID列及其主要键约束。重命名列ID_TEMP TO ID然后将ID列设置为主键。下面的例子:

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

以上是关于ORA-01440:要修改的列必须为空,以降低精度或小数位数的主要内容,如果未能解决你的问题,请参考以下文章

ORA-01439:要更改数据类型,则要修改的列必须为空

关于 ORA-01439: 要更改数据类型, 则要修改的列必须为空

数据库表的列类型转换

有没有办法降低 scipy/numpy 精度以减少内存消耗?

oracle只显示不为空的列

sqlserver数据库插入数据