我有一个名为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)
?
答案 0 :(得分:2)
检查ID是否为PRIMARY KEY。 如果是,则不能将其修改为可为空或向其插入NULL值。
因此,在使用ID'更新ID_TEMP'
之后,最好先执行以下操作删除ID列及其主要约束。 重命名列ID_TEMP到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);