更改Oracle中的数字精度

时间:2014-02-22 20:24:05

标签: oracle precision

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

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

2 个答案:

答案 0 :(得分:3)

你真的想从NUMBER(10,3)改为NUMBER(10,8)吗?这将显着限制可以存储在字段中的数字范围 - 这正是当列中有数据时无法执行此操作的原因。

或者你的意思是你想要将小数位数从3增加到8,同时仍然允许相同的整个值范围?如果是这样,那么我认为您想要将NUMBER(10,3)更改为NUMBER(15,8) - 即使该列包含数据,您也应该能够使用简单的ALTER执行此操作。

答案 1 :(得分: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;

OR

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;