О, и реверс массив
v = 1:10;
v_reverse = v(length(v):-1:1);
Нет, в Oracle
нет SELECT
без FROM
.
Использование дуального
] является хорошей практикой.
dual
- это таблица в памяти. Если вы не выберете в нем DUMMY
, он будет использовать специальный путь доступа ( FAST DUAL
), который не требует ввода-вывода
.
Однажды время, dual
имел две записи (отсюда и название) и предназначался для использования в качестве фиктивного набора записей для дублирования записей, с которыми соединяются.
Теперь он имеет только одну запись, но вы все равно можете сгенерировать произвольное количество строк с ним:
SELECT level
FROM dual
CONNECT BY
level <= 100
MySQL
также поддерживает dual
(а также синтаксис fromless).
рекомендуется использовать двойной table
Да, двойной стол обычно используется именно для этой цели. В Oracle это довольно стандартно, когда у вас нет таблицы для выбора.
не забывайте, что в большинстве случаев вам не нужно использовать 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;
...
Думаю, вам нужно использовать двойной. он используется, когда вам нужно запустить SQL, у которого нет имени таблицы. Я не могу сказать, что использую его иначе, как в сценариях SQL, чтобы вывести дату запуска или что-то подобное.
Да, двойная таблица - это обычный способ сделать это в Oracle. Фактически, он был введен именно для этого.
Основным преимуществом DUAL является то, что оптимизатор в Oracle знает, что он особенный, поэтому запросы с его использованием могут быть быстрее, чем если бы вы использовали однострочную таблицу, которую вы создали сами. В остальном в этом нет ничего особенного.
Фактически, SQL Реализация сервера нестандартная. Стандарт SQL-92 (раздел 7.9) требует наличия предложения FROM в операторе SELECT. DUAL - это способ Oracle предоставить таблицу для выбора для получения скалярной строки.