Oracle тип данных BOOLEAN в таблицах

В Oracle Database есть тип BOOLEAN, но он только для PL/SQL. Его нельзя использовать в качестве типа колонки таблицы. Сложно сказать, почему его нет. Но на текущий момент приходиться использовать CHAR(1)  со значениями 'Y'/ 'N'  или NUMBER(1)  со значениями 1 / .

Чаще всего используется вариант с CHAR(1)  и 'Y' / 'N'. В этом случае одно значение будет занимать ровно один байт. Также рекомендуется накладывать ограничение на колонку, чтобы никто случайно не вставил туда другие значения.

Пример:

Перед созданием колонки с логическим типом стоит хорошенько подумать, так как вполне возможно, что ей можно указать NOT NULL, иначе мы получим BOOLEAN колонку, в которую можно вставить NULL, тогда она по сути будет иметь три значения: ИСТИНА, ЛОЖЬ и NULL.

В приведённом выше SQL-коде мы создаём таблицу mytable  с одной колонкой boolvalue типа CHAR(1). На колонку наложено ограничение: оно может принимать только значения 'Y'  (вместо булевского TRUE) и 'N'  (вместо булевского FALSE). Таким образом чаще всего и имитируется BOOLEAN в Oracle.

Однако при работе с JDBC несколько легче использовать в качестве BOOLEAN  тип NUMBER(1) с  0 вместо FALSE  и 1 вместо TRUE, так как тогда мы сможем без проблем получать значения в Java с помощью методов getBoolean  и устанавливать с помощью setBoolean:

Также можно использовать CHAR(1) со значениями '1'  и '0'. В этом случае getBoolean и setBoolean  в ResultSet-ах Java тоже должны успешно отрабатывать:

Преимущества варианта с CHAR(1)  перед NUMBER(1) ещё в том, что он занимает меньше памяти.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *