В Oracle вы можете (но не обязаны) указывать точность и масштаб для столбцов типа данных NUMBER
. NUMBER(20)
является действительным сокращением для NUMBER(20,0)
, что означает 20 цифр, нет после десятичной точки.
Как это исправить зависит от ваших потребностей. Обычно столбец NUMBER
должен быть объявлен просто как NUMBER
. Укажите точность и масштаб только в том случае, если у вас есть веские основания для этого.
Например: если ваши числа должны быть ограничены не более чем 20 цифрами перед десятичной запятой и не более чем шестью десятичными разрядами (после десятичной запятой), общая ТОЧНОСТЬ будет 20 + 6 = 26. Затем вы объявите NUMBER(26, 6)
.
Вы можете изменить столбец, объявленный как NUMBER(20)
, на NUMBER
(если это соответствует вашим потребностям в противном случае), так как при этом изменении не теряется информация. Тем не менее, обратите внимание, что числа, которые УЖЕ сохранены в столбце, имеют УЖЕ УТЕРЯНУЮ информацию, которую нельзя восстановить из таблицы; вам нужно будет обратиться к первоначальному источнику этих чисел, если вам нужно исправить это.
Краткое демо (обратите внимание в последнем выводе, что строка вставлена ДО изменения, значение которого навсегда изменено на 10, восстановление невозможно)
create table test_tbl
(
amt number(20)
);
insert into test_tbl values (9.999);
select * from test_tbl;
AMT
---
10
alter table test_tbl modify (amt number);
insert into test_tbl values (9.999);
select * from test_tbl;
AMT
-----
10
9.999