Из Википедии :
Таблица DUAL - это специальная таблица из одной строки, присутствующая по умолчанию во всех установках базы данных Oracle. Он подходит для использования при выборе псевдостолбца, такого как SYSDATE или USER. В таблице есть один столбец VARCHAR2 (1) с именем DUMMY, который имеет значение «X».
Таким образом, двойная таблица - это способ выполнения операций с пустой таблицей, но не с нулевой таблицей. Это полезно, когда никому нет дела до таблицы, но нужно выполнять операции с помощью оператора select. Если в таблице более одной строки или столбца, будут возвращены несколько результатов (из-за работы над всем набором кортежей при выполнении операции.)
Его не следует использовать в производственной среде, если только вам специально не нужно вызывать определенные процедуры через SQL.
4*5
это математическая операция, так же как 'Foo'
и строка. Таким образом, точно так же, как можно выбрать 4 * 5 из любой таблицы, точно так же, как можно выбрать «Foo» из любой таблицы, DUAL - это способ выбрать его из заведомо хорошей таблицы, которая никогда не будет иметь несколько результатов.
Из документации (КОНЦЕПЦИИ):
DUAL - это небольшая таблица в словаре данных, на которую Oracle Database и пользовательские программы могут ссылаться, чтобы гарантировать известный результат. Двойная таблица полезна, когда значение должно быть возвращено только один раз, например, текущая дата и время. Все пользователи базы данных имеют доступ к DUAL.
Таблица DUAL имеет один столбец с именем DUMMY и одну строку, содержащую значение X.
И ссылка на SQL :
DUAL - это таблица, автоматически создаваемая Oracle Database вместе со словарем данных. DUAL находится в схеме пользователя SYS, но доступен под именем DUAL для всех пользователей. Он имеет один столбец DUMMY, определенный как VARCHAR2 (1), и содержит одну строку со значением X. Выбор из таблицы DUAL полезен для вычисления константного выражения с помощью оператора SELECT. Поскольку DUAL имеет только одну строку, константа возвращается только один раз. В качестве альтернативы вы можете выбрать константу, псевдостолбец или выражение из любой таблицы, но значение будет возвращено столько раз, сколько строк в таблице. Обратитесь к разделу «О функциях SQL», чтобы найти множество примеров выбора постоянного значения из DUAL.
Начиная с Oracle Database 10g Release 1, логический ввод-вывод не выполняется для таблицы DUAL при вычислении выражения, не содержащего столбец DUMMY. Эта оптимизация указана как БЫСТРЫЙ ДВОЙНОЙ в плане выполнения. Если вы ВЫБИРАЕТЕ столбец DUMMY из DUAL, то эта оптимизация не происходит, и происходит логический ввод-вывод.
DUAL
таблица содержит ровно одну строку, как показано в следующем операторе SQL:В вашей
dual2
таблице нет строк. Если вы вставите один, вы увидите то же самое поведение.4 * 5 - это выражение, которое Oracle может оценить без фактического использования данных из таблицы. Он будет оценивать его один раз для каждой строки, так же, как это делалось бы с обычным выражением столбца. Таким образом, если нет строки, результат не возвращается, если есть две строки, вы получите 20 дважды.
источник
dual
Таблица «работает» почти так, как любые другие настольные работы: это таблица , из которой вы можете выбрать записи.Это означает, например, что вы можете описать таблицу. Здесь, в
SQL*Plus
:Итак, таблица имеет один столбец,
dummy
который называетсяvarchar2(1)
.В таблице есть одна запись (по крайней мере, если с ней никто не возится):
Таким образом, чтобы получить такое же поведение,
dual2
как у васdual
, вы должны вставить одну запись в двойную. Еще лучше, создайте его с помощьюcreate table as select
(ctas):Теперь ваш запрос работает:
Ранее я говорил, что dual почти работает как любой другой стол. Итак, когда он не работает, как любой другой стол?
Он ведет себя по-другому, если не выбрано значение из самой таблицы. Опять же, с вашими запросами, я позволю Oracle объяснить их ...
... чтобы увидеть, как осуществляется доступ к таблице:
Видно, что заявление делает
full table access
наdual2
.Теперь то же самое с
dual
:В этом случае
dual
таблица ведет себя по-разному: значениеdummy
не требуется, поэтому выполняетсяfast dual
операция, чтобы экземпляр не считывал фактическое значение на диске.источник
Кстати, DUAL - это одна из немногих «таблиц», которая работает, когда экземпляр запущен, но база данных еще не открыта.
Вы получаете что-то вроде
источник
В дополнение к другим ответам, Oracle не так требователен к пространственному тексту SQL (по крайней мере, в некоторых местах). Синтаксический анализатор SQL также токенизируется по различиям классов символов в некоторых случаях, а не только по пробелам.
Например, вы можете запустить такие операторы:
Также возможно запустить SQL без пробелов:
У меня есть еще несколько примеров здесь:
http://blog.tanelpoder.com/2008/01/14/can-you-write-a-working-sql-statement-without-using-any-whitespace/
Танель Подер
источник
Быстрая двойная операция переписывает ваш код для запроса x $ dual. Поскольку эта «таблица» является структурой данных C в SGA, вы можете запросить ее в режиме nomount.
источник
На вопрос уже дан ответ. Вот некоторые примечания к цели двойной таблицы. Двойной можно использовать для оценки выражений в предложении выбора. Многие другие системы баз данных не нуждаются в такой таблице для этой цели. MS SQL Server, MySql, Posgres может оценить следующее утверждение
Оракул не может. Оператор выбора Oracle всегда нуждается в предложении "from".
Некоторые функции не могут быть использованы в выражении pl / sql, как DUMP .
Так
поднимет исключение, но
буду работать.
Может использоваться для расширения результирующего набора запроса
который дал
или сгенерируйте данные с помощью запросов выбора, используя
CONNECT BY
:или рекурсивный CTE:
который возвращается
в sqlfiddle
источник
Для чего это стоит, он работает точно так же, как в MySQL.
И кажется также, что DUAL - это своего рода структура памяти в MySQL. Обратите внимание на разницу в двух планах объяснения - «таблицы не используются» для DUAL в MySQL.
Интересно, однако, что я не могу сделать DESC для MySQL dual, который отличается от Oracle - но он был введен специально для AIUI, чтобы позволить синтаксису Oracle работать на MySQL.
источник
В базе данных oracle двойная таблица в основном используется для получения значения псевдоколонок. Содержит следующие свойства:
Если вы хотите получить более подробную информацию, проверьте здесь
источник