Я чув, як люди звертаються до цієї таблиці, і не був впевнений, про що йдеться.
Я чув, як люди звертаються до цієї таблиці, і не був впевнений, про що йдеться.
Відповіді:
Це свого роду фіктивна таблиця з єдиним записом, який використовується для вибору, коли ви насправді не цікавитесь даними, а натомість бажаєте, щоб результати деякої системної функції були в операторі select:
напр select sysdate from dual;
Історія
Таблиця DUAL була створена корпорацією Чак Вайс з Oracle для надання таблиці для приєднання до внутрішніх поглядів:
Я створив таблицю DUAL як основний об'єкт у словнику даних Oracle. Він ніколи не мав на увазі бачити себе, а замість цього використовувався всередині подання, яке, як очікувалося, буде запитуватися. Ідея полягала в тому, що ви можете зробити приєднання до таблиці DUAL і створити результат у двох рядках для кожного рядка таблиці. Тоді, використовуючи GROUP BY, отримане з'єднання можна підсумувати, щоб відобразити обсяг пам’яті для обсягу DATA та для обсягу (-ів) INDEX. Назва, DUAL, здавалося придатною для процесу створення пари рядків із лише одного. 1
З вищезазначеного це може бути не очевидно, але початкова таблиця DUAL мала в ній два ряди (звідси і її назва). Нині це лише один ряд.
Оптимізація
Спочатку DUAL був таблицею, і двигун бази даних виконуватиме диск IO на столі при виборі з DUAL. Цей диск IO зазвичай був логічним IO (не включаючи фізичний доступ до диска), оскільки дискові блоки зазвичай вже були кешовані в пам'яті. Це призвело до великої кількості логічного IO проти таблиці DUAL.
Пізніші версії бази даних Oracle були оптимізовані, і база даних більше не виконує фізичну чи логічну введення-вивід в таблиці DUAL, хоча таблиця DUAL все ще існує.
Я думаю, що ця стаття у Вікіпедії може допомогти уточнити.
http://en.wikipedia.org/wiki/DUAL_table
Таблиця DUAL - це спеціальна однорядна таблиця, яка за замовчуванням присутня у всіх установах бази даних Oracle. Він підходить для використання при виборі псевдоколонки типу SYSDATE або USER. У таблиці є один стовпець VARCHAR2 (1) під назвою DUMMY, який має значення "X"
Вигляд псевдо таблиці можна запускати команди проти та отримувати результати, наприклад, sysdate. Також допоможе вам перевірити, чи не працює Oracle і перевірити sql синтаксис тощо.
Таблиця утиліт в Oracle, що містить лише 1 рядок і 1 стовпець. Він використовується для виконання ряду арифметичних операцій і може використовуватися загалом там, де потрібно генерувати відомий вихід.
ВИБІР * ВІД подвійний;
дасть один рядок, з одним стовпцем з назвою "DUMMY" та значенням "X", як показано тут:
DUMMY ----- X
Більше фактів про ДУАЛЬНИЙ ....
http://asktom.oracle.com/pls/asktom/f?p=100:11 steps::::P11_QUESTION_ID:1562813956388
Тут проводяться захоплюючі експерименти та більш захоплюючі пояснення Тома
Таблиця DUAL - це спеціальна однорядна таблиця, яка за замовчуванням присутня у всіх установах бази даних Oracle. Він підходить для використання при виборі псевдоколонки типу SYSDATE або USER
У таблиці є один стовпець VARCHAR2 (1) під назвою DUMMY, який має значення "X"
Ви можете прочитати все про це на веб-сайті http://en.wikipedia.org/wiki/DUAL_table
Це об’єкт, який потрібно помістити з цього повернення 1 порожнім рядком. Наприклад: виберіть 1 з подвійного; повертає 1
виберіть 21 + 44 з подвійного; повертає 65
виберіть [послідовність]. продовження з подвійного; повертає наступне значення з послідовності.
DUAL ми в основному використовували для отримання наступного числа з послідовностей.
Синтаксис: SELECT 'ім'я послідовності_.NEXTVAL FROM DUAL
Це поверне в одному рядку значення одного стовпця (NEXTVAL назва стовпця).
Інша ситуація, яка потребує, 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» Джоша Джуно та «Метт Арена»
DUAL - це спеціальний один рядок, одна таблиця стовпців за замовчуванням присутня у всіх базах даних Oracle. Власник DUAL - SYS.
DUAL - це таблиця, автоматично створена Oracle Database разом із функціями даних. Він завжди використовується для отримання функцій операційних систем (наприклад, дати, часу, арифметичного вираження тощо).
SELECT SYSDATE from dual;