select 2 + 2
- действительный оператор mysql, но в oracle я должен указать имя таблицы select 2 + 2 from foo
(или dual
таблицы). Есть ли способ не устанавливать оператор from
? Интересно, почему он не является необязательным в Oracle. Предоставление поддельной таблицы звучит фиктивно, когда она может быть необязательной, как другие RDBM.
Вы должны выбрать что-то; в Oracle это таблица DUAL
:
SQL> select 3 + 6 from dual;
3+6
----------
9
Это принадлежащая SYS
таблица и содержит одну строку:
SQL> select * From dual;
DUMMY
--------------------
X
Поэтому это полезно для таких вещей (где вам нужно взять одну строку).
То, как вы его помещаете (select... from foo
), выглядит нормально, если foo также содержит одну строку. Но что, если это не так? Посмотрите: Есть 4 отделов в dept
таблице:
SQL> select 3 + 6 from dept;
3+6
----------
9
9
9
9
Так что - используйте DUAL
:)
используйте double, потому что это однострочная таблица с одиночной строкой с типом данных VARCHAR2 (1) в нем. Обычно используйте double, когда вы хотите извлечь один output.it имеет фиктивное значение X. AS wiki говорит: - Идея заключалась в том, что вы можете сделать JOIN в таблице DUAL и создать две строки в результатах для каждой строки в таблице. Затем, используя GROUP BY, итоговое объединение можно суммировать, чтобы показать объем хранения для объема DATA и для объема (ов) INDEX. Имя, DUAL, казалось подходящим для процесса создания пары строк из одного. [1]
Первоначальная таблица DUAL имела в ней две строки (отсюда и название), но впоследствии она имела только одну строку.
Это не связано с SQL в целом, но с SQL * Plus или другими идами, запущенными как скрипт (F5), вы можете сделать арифметику без указания таблицы
VARIABLE b NUMBER
EXEC :b := 2+2;
PRINT b;
PL/SQL procedure successfully completed.
B
----------
4
Используя подпрограммы PL/SQL в Oracle, вы можете выполнить 2 + 2, например
DECLARE
v_sum number;
BEGIN
v_sum:= 2 + 2;
END;