Skip to content

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

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

Varchar2

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

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

Number

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

sql
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-символа влево, начиная от разделителя дроби
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.33200
12.3450

Date

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

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

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

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

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

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

Boolean

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

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

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