13 ответов:
это своего рода фиктивная таблица с одной записью, используемой для выбора, когда вы на самом деле не заинтересованы в данных, но вместо этого хотите получить результаты некоторой системной функции в инструкции select:
например
select sysdate from dual;
это фиктивная таблица с одним элементом в нем. Это полезно, потому что Oracle не допускает высказываний типа
SELECT 3+4Вы можете обойти это ограничение, написав
SELECT 3+4 FROM DUALвместо.
история
двойная таблица была создана Чаком Вайсом из Oracle corporation, чтобы обеспечить таблицу для объединения во внутренних представлениях:
я создал двойную таблицу в качестве базового объекта в словаре данных Oracle. Он никогда не должен был быть замечен сам, но вместо этого использовался внутри представления, которое должно было быть запрошено. Идея была в том, что вы смогл сделать соединение к двойной таблице и создать две строки в результате для каждой строки в таблице. Затем, используя GROUP BY, результирующее соединение можно суммировать, чтобы показать объем хранилища для экстент данных и для экстента(ов) индекса. Имя, двойное, казалось apt для процесса создания пары строк только из одного. 1
Это может быть не очевидно из вышеизложенного, но исходная двойная таблица имела две строки в ней (отсюда и ее название). В настоящее время он имеет только один ряд.
оптимизация
DUAL изначально был таблицей, и компонент database engine выполнял дисковый ввод-вывод в таблице при выборе из DUAL. Этот диск ИО, как правило, логического ввода-вывода (не связанных с физическим доступом к диску) как дисковые блоки, как правило, уже были кэшированы в памяти. Это привело к большому количеству логического ввода-вывода против двойной таблицы.
более поздние версии базы данных Oracle были оптимизированы, и база данных больше не работает физический или логический IO на двойной таблице, даже если двойная таблица все еще фактически существует.
Я думаю, что эта статья в Википедии может помочь прояснить.
http://en.wikipedia.org/wiki/DUAL_table
двойная таблица особенная ОДН-строка таблица присутствует по умолчанию во всех Oracle установки баз данных. Это подходит для использования при выборе псевдостолбцом такие как SYSDATE или пользователь таблица имеет один столбец VARCHAR2 (1) называется Манекен, который имеет значение "X"
Это специальная таблица в Oracle. Я часто использую его для расчетов или проверки системных переменных. Например:
Select 2*4 from dualвыводит результат расчетаSelect sysdate from dualвыводит текущую дату сервера.
вид псевдо-таблицы, с которой вы можете запускать команды и получать результаты, такие как sysdate. Также помогает вам проверить, работает ли Oracle и проверить синтаксис sql и т. д.
таблица утилит в Oracle только с 1 строкой и 1 столбцом. Он используется для выполнения ряда арифметических операций и может быть использован в общем случае, когда нужно сгенерировать известный выход.
SELECT * FROM dual;
даст одну строку с одним столбцом с именем " DUMMY "и значением" X", как показано здесь:
DUMMY ----- X
больше фактов о двойном....
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1562813956388
захватывающие эксперименты, сделанные здесь, и более захватывающие объяснения Тома
двойная таблица-это специальная однострочная таблица, присутствующая по умолчанию во всех установках баз данных Oracle. Она подходит для использования в выборе псевдостолбцом например, sysdate и
в таблице есть один столбец VARCHAR2 (1) с именем DUMMY, который имеет значение "X"
вы можете прочитать все об этом в http://en.wikipedia.org/wiki/DUAL_table
DUAL необходим в разработке PL / SQL для использования функций, которые доступны только в SQL
например
DECLARE x XMLTYPE; BEGIN SELECT xmlelement("hhh", 'stuff') INTO x FROM dual; END;
Это объект, чтобы положить в из этого возврата 1 пустую строку. Например: выберите 1 из двух; возвращает 1
выберите 21+44 двойной; возвращает 65
выберите [последовательности].nextval от dual; возвращает следующее значение из последовательности.
двойной мы в основном использовали для получения следующего номера из последовательностей.
синтаксис: выберите 'sequence_name'.NEXTVAL ОТ DUAL
это вернет значение одной строки одного столбца (имя столбца NEXTVAL).
другая ситуация, которая требует
select ... from dualэто когда мы хотим получить код (определение данных) для различных объектов базы данных (например, таблица, функция, триггер, пакет), используя встроенный :select DBMS_METADATA.GET_DDL('TABLE','<table_name>') from DUAL; select DBMS_METADATA.GET_DDL('FUNCTION','<function_name>') from DUAL;in верно, что в настоящее время IDE предлагают возможность просмотра DDL таблицы, но в более простых средах, таких как SQL Plus, это может быть очень удобно.
EDIT
более общая ситуация: в основном, когда нам нужно использовать любую процедуру PL / SQL внутри стандартного оператора SQL или когда мы хотим вызвать процедуру из командной строки:
select my_function(<input_params>) from dual;оба рецепта взяты из книги "Oracle PL / SQL Recipes" Джоша Джуно и Мэтта Арены
Comments