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