执行语句而不指定表

时间:2018-07-24 04:54:49

标签: mysql oracle

select 2 + 2是有效的mysql语句,但是在oracle中我必须提供表名select 2 + 2 from foo(或dual表)。有什么方法可以不设置from语句吗?我想知道为什么它在Oracle中不是可选的。当它可以像其他RDBM一样可选时,提供伪造的表听起来是假的。

4 个答案:

答案 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表中有两行(因此得名),但随后只有一行。