我們試圖修改數據庫中現有列的精度。那些已被定義爲NUMBER的,我們想要將其更改爲NUMBER(14,2)。在插入數據庫之前截斷值
但是,由於NUMBER的默認精度爲38,因此數據庫中存在超過10個小數位的值。所以,當我們創建一個額外的列並嘗試從臨時表中複製時,這會導致錯誤。
select count(*) into countCol from USER_TAB_COLUMNS where TABLE_NAME = 'EVAPP_INTERFACE' and COLUMN_NAME = 'RESERVE_RATE_NUM' and DATA_SCALE is null;
IF (countCol <> 0) then
execute immediate 'alter table EVAPP_INTERFACE add RESERVE_RATE_NUM_TMP NUMBER(6,3)' ;
execute immediate 'update EVAPP_INTERFACE set RESERVE_RATE_NUM_TMP = RESERVE_RATE_NUM' ;
execute immediate 'alter table EVAPP_INTERFACE drop column RESERVE_RATE_NUM' ;
execute immediate 'alter table EVAPP_INTERFACE rename column RESERVE_RATE_NUM_TMP to RESERVE_RATE_NUM' ;
DBMS_OUTPUT.put_line('This column EVAPP_INTERFACE.RESERVE_RATE_NUM has been modified to the required precision');
是否有任何方法來截斷列中的所有值?
就像說一個列有
43.8052201822
21.1610909091
76.4761223618
75.8535613657
我希望他們全部改爲
43.8
21.16
76.47
75.85
編輯:我知道截斷錯誤地使用這個詞,但我不知道一個更好的詞以削減精度。
什麼ROUND()? – rkosegi 2012-02-20 17:24:48
[截斷](http://en.wikipedia.org/wiki/Truncate)與[舍入](http://en.wikipedia.org/wiki/Rounding)不同。問題中給出的示例指示截斷,但接受的答案是四捨五入。 – user272735 2012-02-20 18:02:38