select 2 + 2
是有效的mysql语句,但是在oracle中我必须提供表名select 2 + 2 from foo
(或dual
表)。有什么方法可以不设置from
语句吗?我想知道为什么它在Oracle中不是可选的。当它可以像其他RDBM一样可选时,提供伪造的表听起来是假的。
答案 0 :(得分:3)
您必须从某物中进行选择;在Oracle中,它是DUAL
表:
SQL> select 3 + 6 from dual;
3+6
----------
9
这是一个SYS
拥有的表,仅包含一行:
SQL> select * From dual;
DUMMY
--------------------
X
因此,它对于此类事情(您需要提取一行)很有用。
如果foo也包含一行,则您的放置方式(select ... from foo
是可以的。但是,如果没有呢?看看:dept
表中有4个部门:
SQL> select 3 + 6 from dept;
3+6
----------
9
9
9
9
所以-使用DUAL
:)
答案 1 :(得分:0)
例如,在Oracle中使用PL/SQL Subprograms可以执行2 + 2
DECLARE
v_sum number;
BEGIN
v_sum:= 2 + 2;
END;
答案 2 :(得分:0)
这通常与SQL不相关,但是从SQL * Plus或其他以脚本(F5)运行的方式中,您可以执行算术运算而无需指定表
VARIABLE b NUMBER
EXEC :b := 2+2;
PRINT b;
PL/SQL procedure successfully completed.
B
----------
4
答案 3 :(得分:0)
使用对偶,因为它是单行单列表,数据类型为VARCHAR2(1)。当要获取单个输出时总是使用对偶,它的虚拟值为X. AS Wiki说:-想法是您可以对DUAL表进行JOIN并为表中的每一行在结果中创建两行。然后,通过使用GROUP BY,可以汇总结果联接以显示DATA扩展区和INDEX扩展区的存储量。名称DUAL似乎很适合仅从一个行创建一对行的过程。[1]
原始DUAL表中有两行(因此得名),但随后只有一行。