Использование BOOLEAN в SELECT Oracle: обход ORA-00904
Быстрый ответ
Для выбора записей по условию на логическое поле типа BOOLEAN используйте SQL-запрос в следующем виде:
SELECT * FROM таблица WHERE логический_столбец;
Для инвертирования условия добавьте NOT:
SELECT * FROM таблица WHERE NOT логический_столбец;
С помощью оператора CASE можно заменить отображение на более наглядные значения:
SELECT CASE WHEN логический_столбец THEN 'Да' ELSE 'Нет' END FROM таблица;

Альтернативы BOOLEAN в других базах данных
В таких системах управления базами данных как Oracle и MySQL, который не поддерживают тип BOOLEAN, вместо него используются 1 и 0, обозначающие true и false соответственно. Это необходимо учесть при составлении запросов.
Трактовка логического типа как целого числа:
SELECT CASE WHEN is_active THEN 1 ELSE 0 END AS флаг_активности FROM пользователи;
Этот пример показывает, как интерпретируются значения is_active: 1 для активных, а 0 для неактивных пользователей.
Преобразование логического типа в строку:
SELECT name, CASE WHEN is_admin THEN 'true' ELSE 'false' END AS статус_админа FROM пользователи;
Такой запрос делает выходные данные понятными для тех, кто не связан с программированием.
Работа с BOOLEAN на профессиональном уровне
Использование BOOLEAN в PL/SQL
В PL/SQL BOOLEAN может используются в функциях. Для интеграции с SQL требуются оборачивающие функции, представляющие логические значения:
CREATE FUNCTION wrap_boolean(p_int IN NUMBER) RETURN BOOLEAN AS
BEGIN
RETURN sys.diutil.int_to_bool(p_int); -- Конвертация числового значения в BOOLEAN
END wrap_boolean;
Используйте эту функцию для работы с BOOLEAN в PL/SQL через SQL-запросы.
Отображение данных в удобочитаемом виде
Преобразуйте BOOLEAN в человечески удобный формат с использованием IF-THEN или CASE:
SELECT id, name, CASE WHEN expires_at > CURRENT_DATE THEN 'Активна' ELSE 'Истекла' END AS статус_подписки FROM члены;
SQL предлагает гибкие инструменты для работы с данными, минуя потребность в графических интерфейсах.
Визуализация
Логический тип данных в SELECT можно изобразить как светофор:
SELECT CASE
WHEN условие = TRUE THEN '🟢'
ELSE '🔴'
END AS Светофор
FROM ДанныеШоссе;
В мире SQL BOOLEAN контролирует доступ к данным:
Условие выполнено: 🟢 (Данные доступны)
Условие не выполнено: 🔴 (Доступ ограничен)
Как и светофор, BOOLEAN может пропускать (TRUE) или блокировать (FALSE) данные.
Распространённые проблемы с BOOLEAN
Использование оператора "TRUE" в Oracle SQL
Избегайте использования TRUE в Oracle SQL, так как это может привести к ошибке ORA-00904: недопустимый идентификатор.
Вставка данных типа BOOLEAN без предварительной обработки
В СУБД, не поддерживающих BOOLEAN, требуется преобразовать значение в целое число или строку перед вставкой.
Работа с BOOLEAN в инструментах, требующих совместимости с SQL
При использовании инструментов типа Hibernate или Mybatis, которые ожидают BOOLEAN в форме 1 и 0, необходимо следовать их соглашениям для правильной работы запросов.
Посторонняя мудрость и адаптация приложений
Соединение баз данных
BOOLEAN функционирует по-разному в разных СУБД:
- В PostgreSQL используются
't'и'f'. - В MySQL это аналог
TINYINT(1)с1обозначающимtrueи0false. - В SQLite любое ненулевое значение интерпретируется как
true.
Соответствие с высокоуровневым кодом приложения
Ваш SQL-код должен учитывать ожидания прикладного уровня вашего приложения в части обработки логических значений.
Полезные материалы
- PostgreSQL: Документация по типу Boolean — описание применения типа Boolean в PostgreSQL.
- bit (Transact-SQL) – SQL Server | Microsoft Learn — информация от Microsoft о типе данных BIT в SQL Server.
- Типы данных в SQLite — обзор обработки типов данных, включая логические, в SQLite.
- Типы данных в Oracle — официальная документация Oracle о типах данных, включая сведения о Boolean.
- Типы данных SQL для MySQL, SQL Server и MS Access — подробная инструкция от W3Schools о типах данных SQL в разных СУБД.
- Обработка логических значений в SQL-запросах через JDBC — руководство по работе с логическими значениями в базах данных посредством JDBC.