データベースの既存の列の精度を変更しようとしています。 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.8
21.16
76.47
75.85
EDITに変更したい列が
43.8052201822
21.1610909091
76.4761223618
75.8535613657
を持って言う:私は切り捨てが誤って使用されている単語を知っているが、私はより良い用語を知りません精度を剃る
どうROUNDについて()?? – rkosegi
[切り捨て](http://en.wikipedia.org/wiki/Truncate)は[丸め](http://en.wikipedia.org/wiki/Rounding)とは異なります。問題の例は切り捨てを示していますが、受け入れられる答えは四捨五入です。 – user272735