Подтвердить что ты не робот

Выберите без предложения FROM в Oracle

в SQL Server можно выполнить SELECT без ссылки на таблицу; что-то вроде:

Select 1.2 +3, 'my dummy string'

Как Oracle не позволяет SELECT без FROM, я использую двойную таблицу для этого типа операции; что-то вроде:

Select 1,2+3, 'my dummy string' FROM DUAL

Существует лучший способ сделать этот тип запроса? полезно использовать двойную таблицу?

4b9b3361

Ответ 1

Нет, в Oracle нет SELECT без FROM.

Использование таблицы dual является хорошей практикой.

dual - это таблица в памяти. Если вы не выбрали DUMMY из него, он использует специальный путь доступа (FAST DUAL), который не требует I/O.

Когда-то время dual имело две записи (отсюда и название) и предназначалось для использования в качестве фиктивного набора записей для дублирования замещаемых записей.

Теперь у него есть только одна запись, но вы все равно можете создать с ней произвольное количество строк:

SELECT  level
FROM    dual
CONNECT BY
        level <= 100

MySQL также поддерживает dual (а также без синтаксиса).

Ответ 2

не забывайте, что в большинстве случаев вам не нужно использовать SELECT.

Вместо:

SELECT sysdate INTO l_date FROM dual;
SELECT CASE WHEN i = j THEN 0 ELSE 1 END INTO l_foo FROM dual;
...

вы можете использовать

l_date := sysdate;
l_foo  := CASE WHEN i = j THEN 0 ELSE 1 END;
...

Ответ 3

хорошо использовать двойную Таблица

Да, для этой цели обычно используется двойная таблица. Это довольно стандартно в Oracle, когда у вас нет таблицы для выбора.

Ответ 4

Думаю, вам нужно использовать двойное. он используется, когда вам нужно запустить SQL, у которого нет имени таблицы. Я не могу сказать, что я использую его гораздо больше, чем в сценариях SQL, чтобы повторить, что что-то запущено или что-то глупое.

Ответ 5

Да, двойная таблица - это обычный способ сделать это в Oracle. На самом деле, это было введено только для этого.

Основным преимуществом DUAL является то, что оптимизатор в Oracle знает, что он особенный, поэтому запросы, использующие его, могут выполняться быстрее, чем если бы вы использовали таблицу из одной строки, которую вы сделали самостоятельно. Кроме этого, в этом нет ничего особенного.

Ответ 6

Собственно, реализация SQL Server нестандартна. SQL-92 Standard (раздел 7.9) требует предложения FROM в инструкции SELECT. DUAL - это Oracle способ предоставления таблицы для выбора, чтобы получить скалярную строку.