改变Oracle中的数精度的[复制](Changing the number precision i

2019-10-31 03:02发布

这个问题已经在这里有答案 :

我还没有看到这个确切的问题......我很抱歉,如果我错过了。

我有我在创建它,当他们失去了合同,我公司的公司承继的数据库。 现在,客户有“紧急”的问题,以更改值的精度。 他们想改变为10.3至10.8的数字; 该字段在数据库中作为10,3定义。 在我的问题的研究,看来我必须做相当多的操作要做到这一点,因为该表必须为空的改变精度。 我假设,即使默认值是10.38(或者不管它是什么),因为他们将它定义为10,3在创建时,如果我只是增加在ColdFusion代码字段,当它保存,它会截断为10,3 ? 这种变化将涉及我捕捉当前数据,删除数据,改变精度,然后重新加载数据,以确保现有的数据已经被改变了。 是的,我知道这不是在细节,但希望得到跨越点。 谢谢。

Answer 1:

你真的想从一个NUMBER(10,3)到NUMBER(10,8)的变化? 这将显著限制可以存储在该领域数的范围 - 这也正是为什么你不能做到这一点时,有列数据。

或者,你的意思是你要增加3到8位小数的数量,同时仍允许值相同的总范围是多少? 如果是这样,那么我认为你要改变NUMBER(10,3)到NUMBER(15,8) - 你应该能够做到这一点,即使列包含数据使用简单的ALTER。



Answer 2:

处理这种情况最简单的方法是重命名列,复制过来,然后删除原始列中的数据:

alter table EVAPP_FEES rename column AMOUNT to AMOUNT_OLD;

alter table EVAPP_FEES add AMOUNT NUMBER(14,2);

update EVAPP_FEES set AMOUNT = AMOUNT_OLD;

alter table EVAPP_FEES drop column AMOUNT_OLD;

要么

alter table EVAPP_FEES add AMOUNT_TEMP NUMBER(14,2);

update EVAPP_FEES set AMOUNT_TEMP = AMOUNT;

update EVAPP_FEES set AMOUNT = null;

alter table EVAPP_FEES modify AMOUNT NUMBER(14,2);

update EVAPP_FEES set AMOUNT = AMOUNT_TEMP;

alter table EVAPP_FEES drop column AMOUNT_TEMP;


文章来源: Changing the number precision in Oracle [duplicate]