DUAL — магическая таблица Oracle
Когда только начинаешь работать с Oracle Database, встречаешь странную таблицу — DUAL.Что это за чудо и зачем она нужна?
DUAL — это специальная таблица, созданная для выполнения запросов, которые не требуют данных из реальной таблицы.
Почему вообще появилась DUAL?
В Oracle синтаксис SELECT требует указания источника данных. Даже если вам нужно просто выполнить выражение, вызвать функцию или получить системное значение — нужен FROM с таблицей.
Чтобы не создавать отдельные "временные" таблицы под каждый запрос, Oracle ввела универсальную таблицу DUAL.
Синтаксис вызова
Результат выполнения:
Результата выполнения (в PL/SQL Developer v16)
Результата выполнения (в Oracle APEX)
Здесь мы просто хотим получить цифру 1 — без обращения к конкретным данным
Фишка DUAL
- Всегда содержит ровно одну строку и один столбец ('DUMMY' со значением 'X').
- Нужна, чтобы синтаксис SQL оставался корректным (ведь 'SELECT' в Oracle требует обязательное указание источника данных).
DUAL очень лёгкая и оптимизированная — Oracle не читает с диска, а создаёт её результат прямо в памяти. ⚡
Когда использовать DUAL?
- Для получения системных значений (SYSDATE, USER, UID и др.).
- Для простых вычислений в SQL без обращения к таблицам.
- Для тестирования функций и выражений.
Примеры запросов с DUAL
📍 Получение текущей даты:
📍 Выполнение вычислений:
📍 Вызов системной функции:
Интересный факт
В некоторых других базах данных (например, PostgreSQL) таблица DUAL не требуется — там можно выполнять запросы без источника данных.Но в Oracle DUAL — это своего рода "магический костыль", который делает запросы формально правильными.
DUAL — это маленькая, но очень важная часть повседневной работы в Oracle. Без неё многие запросы просто не выполнились бы!
Полезные ссылки
- Официальная документация Oracle — DUAL (читать документацию)
- Online выполнение запросов Oracle (выполнить запрос)
- PL/SQL Developer (скачать)
- SQL Developer (скачать)
- Toad for Oracle (скачать)
Заключение
DUAL = "виртуальная" таблица для выполнения вычислений, вызова функций и получения системных значений без лишнего кода.
✏ Следите за моим блогом — в следующих постах расскажу ещё больше лайфхаков и интересных особенностей Oracle Database!