Skip to content

Основные типы данных

Таблицы могут содержать не только строки. Рассмотрим основные типы данных в БД Oracle.

Varchar2

Строковый тип. При создании таблицы всегда нужно указывать размер строки. Размер может указываться в байтах либо в символах. По-умолчанию максимальный размер строки равен 4000 байт, либо 4000 символов. Этот размер может быть изменен дополнительной настройкой БД.

country(100);-- строка из 100 байт
country(100 char); -- строка из 100 символов

Number

Числовой тип данных. Используется для хранения как целых чисел, так и дробных чисел. Тип Number может хранить положительные или отрицательные числа, размер которых ограничен 38 цифрами. Размер числового типа можно ограничивать:

age number(3); -- максимальное число = 999; минимальное= -999
price number(5,3);  -- максимальное число = 99.999; минимальное= -99,999
must_print number(1); -- максимальное число = 9; минимальное= -9
rounded_price number(5, -2); -- Число, округленное до 2-символа влево, начиная от разделителя дроби

Рассмотрим последний пример: rounded_price number(5, -2). Значение -2 здесь означает, что любое дробное число, которое будет записываться в эту колонку, будет округлено, включая две предшествующих резделителю дроби цифры. Ниже показаны примеры входных чисел и числа, в которые они будут преобразованы при сохранении их в колонке rounded_price:

Входное число | Выходное число
3245.3        |   3200
12.345        |   0

Date

Тип Date предназначен для хранения даты и времени. Данный тип данных хранить в себе следующую информацию:

  • Год
  • Месяц
  • День(Число)
  • Часы
  • Минуты
  • Секунды

Не всегда бизнес-логика приложения требует хранения даты вплоть до секунды или до дня - иногда нас может интересовать лишь конкретный месяц в году, или только год. В таких случаях незначимая информация как правило устанавливается в некое начальное значение, например:

|Что нам нужно хранить      |Что мы сохраняем в БД
----------------------------+----------------------
| Дату вплоть до числа      | 20.05.2019
| Определенный месяц в году | 01.10.2019
| Время, до минут           | 01.01.1900 20:48

Во втором случае нас интересует только месяц и год, но мы не можем игнорировать число, поэтому мы сами решили использовать в качестве дня первый день месяца. Здесь могло быть и 3, и 30, и 20 число месяца. Просто при работе с такими колонками следует знать, для чего они используются и использовать только ту часть даты, которая должна использоваться согласно бизнес-логике.

В третьем случае дата как таковая нас вообще не интересует - нам важно знать только время, поэтому год, месяц и число можно выбрать любые. Конечно, чтобы использовать только время, нужно будет производить определенные манипуляции со значением такого столбца(например отделение значения часов и/или минут, приведение числа, месяца и года к определенным значениям, и т.п.). Также, если известно, что придется работать только определенной частью даты, можно использовать тип number. Как пример - колонка release_year, которая хранит в себе год выпуска определенной модели авто. Здесь месяц, число и время скорее всего не понадобятся совсем.

Boolean

Логического типа данных в БД Oracle нет. Но вместо него можно использовать уже знакомые типы number или varchar2:

create table questions(
    is_right_n number(1), --<1>
    is_right_c varchar2(1) --<2>
);

<1> - значение, равное 1 трактуем как истину, иначе - ложь(или наоборот) <2> значение, равное символу 'Y' - истинно, 'N' - ложно