2012-04-09 4 views
1

Я очень новичок в oracle, но я узнал об этом в классе, и недавно я столкнулся с типом данных number. Я прочитал документацию относительно масштаба и точности (s, p), но я все еще не уверен в правильном использовании этого типа.Тип данных Oracle Number и его строгость

Предположим, что я хочу сохранить процентные значения в виде десятичной дроби. Десятичное число может быть от 0 до 1 и может содержать до трех чисел после десятичного знака.

Некоторые возможные десятичные, чтобы быть сохранены могут включать в себя:

.66 
.553 
1.00 

Если бы я сделать столбец NUMBER(4,3) это будет работать, даже если были только два числа? См. Ниже

.22 
.10 
.35 
etc... 

Короче говоря, подходит ли тип номера для соответствия ТОЧНЫХ размеров? Например. Было бы ЧИСЛО (4,3) АБСОЛЮТНО ТРЕБУЕТСЯ, что введенные данные - это 4 номера, из которых 3 падают после десятичной точки?

Спасибо за помощь!

+0

«Число (4, 3)» может содержать значения от -9.999 до 9.999 включительно. Чтобы сохранить числа в допустимом диапазоне, который вы хотите, помимо объявления его типа «число (4,3)», необходимо вызвать контрольное ограничение. 'create table t (n число (4,3) ограничение t_c0 check (t от 0 до 1))' –

ответ

2

Типы данных для столбцов ограничивают диапазон значений, которые могут быть сохранены. Но они не делают ничего, чтобы заставить определенную длину или точность.

Как и вы можете сохранить один символ или NULL в столбце VARCHAR2(100), вы можете хранить номера с точностью менее 3 цифр и менее 4 цифр шкалы. Например, значения 0 и 6.1 идеально подходят для столбца NUMBER(4,3). Если вы вставляете значение с слишком большим количеством цифр, значение будет округлено до точности, указанной в определении столбца.

SQL> create table foo (
    2 col1 number(4,3) 
    3 ); 

Table created. 

SQL> insert into foo values(9.999); 

1 row created. 

SQL> insert into foo values (0); 

1 row created. 

SQL> insert into foo values(6.1); 

1 row created. 

SQL> insert into foo values(1.2345); 

1 row created. 

SQL> select * from foo; 

     COL1 
---------- 
    9.999 
     0 
     6.1 
    1.235 
+0

Спасибо, сравнение VARCHAR имело для меня смысл. –

+0

У меня нет времени для тестирования, но я считаю, что Oracle будет округлять или обрезать при назначении значения с большей точностью. Например, вы можете сохранить 0.225232 в столбце 'number (4, 3)'. –

+0

Я знаю, что приведенное выше утверждение неверно. Когда я тестировал это, мне дали ошибки, указав, что число было слишком точным для столбца (но не в этих словах). –

Смежные вопросы