Що таке подвійна таблиця в Oracle?


229

Я чув, як люди звертаються до цієї таблиці, і не був впевнений, про що йдеться.


2
asktom.oracle.com/pls/asktom/… подробиці про подвійний
SriniV

Найкращий анс - це все про подвійний asktom.oracle.com/pls/asktom/… , люди не приділяють більше уваги вищенаведеному посиланню на коментарі, тому я коментую тут. Подивіться на це, ви не пошкодуєте
Варун

Відповіді:


229

Це свого роду фіктивна таблиця з єдиним записом, який використовується для вибору, коли ви насправді не цікавитесь даними, а натомість бажаєте, щоб результати деякої системної функції були в операторі select:

напр select sysdate from dual;

Див. Http://www.adp-gmbh.ch/ora/misc/dual.html


79

Це манекенний стіл з одним елементом в ньому. Це корисно, оскільки Oracle не дозволяє такі заяви

 SELECT 3+4

Ви можете подолати це обмеження, написавши

 SELECT 3+4 FROM DUAL

замість цього.


70

З Вікіпедії

Історія

Таблиця DUAL була створена корпорацією Чак Вайс з Oracle для надання таблиці для приєднання до внутрішніх поглядів:

Я створив таблицю DUAL як основний об'єкт у словнику даних Oracle. Він ніколи не мав на увазі бачити себе, а замість цього використовувався всередині подання, яке, як очікувалося, буде запитуватися. Ідея полягала в тому, що ви можете зробити приєднання до таблиці DUAL і створити результат у двох рядках для кожного рядка таблиці. Тоді, використовуючи GROUP BY, отримане з'єднання можна підсумувати, щоб відобразити обсяг пам’яті для обсягу DATA та для обсягу (-ів) INDEX. Назва, DUAL, здавалося придатною для процесу створення пари рядків із лише одного. 1

З вищезазначеного це може бути не очевидно, але початкова таблиця DUAL мала в ній два ряди (звідси і її назва). Нині це лише один ряд.

Оптимізація

Спочатку DUAL був таблицею, і двигун бази даних виконуватиме диск IO на столі при виборі з DUAL. Цей диск IO зазвичай був логічним IO (не включаючи фізичний доступ до диска), оскільки дискові блоки зазвичай вже були кешовані в пам'яті. Це призвело до великої кількості логічного IO проти таблиці DUAL.

Пізніші версії бази даних Oracle були оптимізовані, і база даних більше не виконує фізичну чи логічну введення-вивід в таблиці DUAL, хоча таблиця DUAL все ще існує.


21

Я думаю, що ця стаття у Вікіпедії може допомогти уточнити.

http://en.wikipedia.org/wiki/DUAL_table

Таблиця DUAL - це спеціальна однорядна таблиця, яка за замовчуванням присутня у всіх установах бази даних Oracle. Він підходить для використання при виборі псевдоколонки типу SYSDATE або USER. У таблиці є один стовпець VARCHAR2 (1) під назвою DUMMY, який має значення "X"


10

Це спеціальна таблиця в Oracle. Я часто використовую це для розрахунків або перевірки змінних системи. Наприклад:

  • Select 2*4 from dual виводить результат розрахунку
  • Select sysdate from dual друкує поточну дату сервера.

4

Вигляд псевдо таблиці можна запускати команди проти та отримувати результати, наприклад, sysdate. Також допоможе вам перевірити, чи не працює Oracle і перевірити sql синтаксис тощо.


4

Таблиця утиліт в Oracle, що містить лише 1 рядок і 1 стовпець. Він використовується для виконання ряду арифметичних операцій і може використовуватися загалом там, де потрібно генерувати відомий вихід.

ВИБІР * ВІД подвійний;

дасть один рядок, з одним стовпцем з назвою "DUMMY" та значенням "X", як показано тут:

DUMMY
----- 
X


2

Таблиця DUAL - це спеціальна однорядна таблиця, яка за замовчуванням присутня у всіх установах бази даних Oracle. Він підходить для використання при виборі псевдоколонки типу SYSDATE або USER

У таблиці є один стовпець VARCHAR2 (1) під назвою DUMMY, який має значення "X"

Ви можете прочитати все про це на веб-сайті http://en.wikipedia.org/wiki/DUAL_table


1

DUAL необхідний при розробці PL / SQL для використання функцій, доступних лише в SQL

напр

DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;

0

Це об’єкт, який потрібно помістити з цього повернення 1 порожнім рядком. Наприклад: виберіть 1 з подвійного; повертає 1

виберіть 21 + 44 з подвійного; повертає 65

виберіть [послідовність]. продовження з подвійного; повертає наступне значення з послідовності.


0

DUAL ми в основному використовували для отримання наступного числа з послідовностей.

Синтаксис: SELECT 'ім'я послідовності_.NEXTVAL FROM DUAL

Це поверне в одному рядку значення одного стовпця (NEXTVAL назва стовпця).


1
Це не потрібно з 11г. Послідовності можуть бути використані в PL / SQL.
Джон Хеллер

0

Інша ситуація, яка потребує, select ... from dual це коли ми хочемо отримати код (визначення даних) для різних об'єктів бази даних (наприклад, ТАБЛИЦЯ, ФУНКЦІЯ, ТРІГГЕР, ПАКЕТ), використовуючи вбудовану DBMS_METADATA.GET_DDLфункцію:

select DBMS_METADATA.GET_DDL('TABLE','<table_name>') from DUAL;

select DBMS_METADATA.GET_DDL('FUNCTION','<function_name>') from DUAL;

в дійсності, що в даний час IDE дійсно пропонують можливість перегляду DDL таблиці, але в більш простих середовищах, таких як SQL Plus, це може бути дуже зручним.

EDIT

більш загальна ситуація: в основному, коли нам потрібно використовувати будь-яку процедуру PL / SQL всередині стандартного оператора SQL, або коли ми хочемо викликати процедуру з командного рядка:

select my_function(<input_params>) from dual;

обидва рецепти взяті з книги «Рецепти Oracle PL / SQL» Джоша Джуно та «Метт Арена»


0

DUAL - це спеціальний один рядок, одна таблиця стовпців за замовчуванням присутня у всіх базах даних Oracle. Власник DUAL - SYS.

DUAL - це таблиця, автоматично створена Oracle Database разом із функціями даних. Він завжди використовується для отримання функцій операційних систем (наприклад, дати, часу, арифметичного вираження тощо).

SELECT SYSDATE from dual;  
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.