DUAL — магическая таблица Oracle

Когда только начинаешь работать с Oracle Database, встречаешь странную таблицу — DUAL.Что это за чудо и зачем она нужна?

DUAL — это специальная таблица, созданная для выполнения запросов, которые не требуют данных из реальной таблицы.

Почему вообще появилась DUAL?

В Oracle синтаксис SELECT требует указания источника данных. Даже если вам нужно просто выполнить выражение, вызвать функцию или получить системное значение — нужен FROM с таблицей.

Чтобы не создавать отдельные "временные" таблицы под каждый запрос, Oracle ввела универсальную таблицу DUAL.

Синтаксис вызова

SELECT 1 AS result_from_dual FROM dual

Результат выполнения:

DUAL — магическая таблица Oracle

Результата выполнения (в PL/SQL Developer v16)

Результата выполнения (в Oracle APEX)

Здесь мы просто хотим получить цифру 1 — без обращения к конкретным данным

Фишка DUAL

  1. Всегда содержит ровно одну строку и один столбец ('DUMMY' со значением 'X').
  2. Нужна, чтобы синтаксис SQL оставался корректным (ведь 'SELECT' в Oracle требует обязательное указание источника данных).

DUAL очень лёгкая и оптимизированная — Oracle не читает с диска, а создаёт её результат прямо в памяти. ⚡

Когда использовать DUAL?

  • Для получения системных значений (SYSDATE, USER, UID и др.).
  • Для простых вычислений в SQL без обращения к таблицам.
  • Для тестирования функций и выражений.

Примеры запросов с DUAL

📍 Получение текущей даты:

SELECT SYSDATE FROM dual;

📍 Выполнение вычислений:

SELECT 10 + 20 FROM dual;

📍 Вызов системной функции:

SELECT USER FROM dual;

Интересный факт

В некоторых других базах данных (например, PostgreSQL) таблица DUAL не требуется — там можно выполнять запросы без источника данных.Но в Oracle DUAL — это своего рода "магический костыль", который делает запросы формально правильными.

DUAL — это маленькая, но очень важная часть повседневной работы в Oracle. Без неё многие запросы просто не выполнились бы!

Полезные ссылки

Заключение

DUAL = "виртуальная" таблица для выполнения вычислений, вызова функций и получения системных значений без лишнего кода.

✏ Следите за моим блогом — в следующих постах расскажу ещё больше лайфхаков и интересных особенностей Oracle Database!

Контакты

Начать дискуссию