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

标签 oracle

我有一个名为 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)

最佳答案

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

因此最好在执行“使用 ID 值更新 ID_TEMP”后执行以下操作

删除 ID 列及其主键约束。 将列 ID_TEMP 重命名为 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);

关于oracle - ORA-01440 : column to be modified must be empty to decrease precision or scale,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23802066/

相关文章:

oracle - 如何终止仅处于非事件状态的 Oracle 数据库 session ?

sql - 我们可以动态指定并行度吗?

oracle - oracle apex 中的预渲染和后渲染

c# - 在事务中截断 Oracle 临时表,截断 *所有* 临时表

oracle - 如何在Gitlab-ci中执行SQL文件

regex - 如何在oracle列中查找连续重复的字符

Oracle查询自连接?

java - 无法访问存储过程的 OUT 参数

sql - Oracle 临时表空间更改语句

java - 为什么 Oracle Pivot 产生不存在的结果?