Мы пытаемся изменить точность существующих столбцов в базе данных. Те, которые были определены как NUMBER, мы хотим изменить его на NUMBER (14,2).
Но, поскольку NUMBER имеет точность по умолчанию 38, в базе данных существуют значения, которые встречаются более чем в десятичных разрядах. Таким образом, когда мы создаем дополнительный столбец и пытаемся скопировать его из временной таблицы, это приводит к ошибкам.
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
РЕДАКТИРОВАТЬ: я знаю, что слово Truncate используется неправильно, но я не знаю лучшего термина для снижения точности.