select 2 + 2 是一个有效的mysql语句,但在oracle中我必须提供一个表名 select 2 + 2 from foo (或 dual 表)。有没有什么办法不把 from 声明?我想知道为什么它在oracle中不是可选的。提供一个假表听起来很假,因为它可以作为其他rdbms的选择。
select 2 + 2
select 2 + 2 from foo
dual
from
afdcj2ne1#
一般来说,这与sql无关,但在sql*plus或其他以脚本(f5)形式运行的IDE中,您可以在不指定表的情况下执行算术
VARIABLE b NUMBER EXEC :b := 2+2; PRINT b; PL/SQL procedure successfully completed. B ---------- 4
fgw7neuy2#
使用dual,因为它是一个数据类型为varchar2(1)的单行单列表。要获取单个输出时,请始终使用dual。它的伪值为x。正如wiki所说:-这个想法是您可以对dual表进行连接,并为表中的每一行在结果中创建两行。然后,通过使用GROUPBY,可以汇总得到的联接,以显示数据区和索引区的存储量。名称dual似乎适合于从一行创建一对行的过程原来的双表中有两行(因此得名),但后来只有一行。
z3yyvxxp3#
例如,在oracle中使用pl/sql子程序可以执行2+2
DECLARE v_sum number; BEGIN v_sum:= 2 + 2; END;
2admgd594#
你必须从某物中选择;在甲骨文中,它是 DUAL 表格:
DUAL
SQL> select 3 + 6 from dual; 3+6 ---------- 9
它是一个 SYS 拥有的表并包含一行:
SYS
SQL> select * From dual; DUMMY -------------------- X
因此,它对于这样的事情很有用(需要获取一行)。按照你的说法( select ... from foo )如果foo还包含一行,则可以。但是,如果没有呢?看一看:医院有4个部门 dept 表格:
select ... from foo
dept
SQL> select 3 + 6 from dept; 3+6 ---------- 9 9 9 9
所以-使用 DUAL :)
4条答案
按热度按时间afdcj2ne1#
一般来说,这与sql无关,但在sql*plus或其他以脚本(f5)形式运行的IDE中,您可以在不指定表的情况下执行算术
fgw7neuy2#
使用dual,因为它是一个数据类型为varchar2(1)的单行单列表。要获取单个输出时,请始终使用dual。它的伪值为x。正如wiki所说:-这个想法是您可以对dual表进行连接,并为表中的每一行在结果中创建两行。然后,通过使用GROUPBY,可以汇总得到的联接,以显示数据区和索引区的存储量。名称dual似乎适合于从一行创建一对行的过程
原来的双表中有两行(因此得名),但后来只有一行。
z3yyvxxp3#
例如,在oracle中使用pl/sql子程序可以执行2+2
2admgd594#
你必须从某物中选择;在甲骨文中,它是
DUAL
表格:它是一个
SYS
拥有的表并包含一行:因此,它对于这样的事情很有用(需要获取一行)。
按照你的说法(
select ... from foo
)如果foo还包含一行,则可以。但是,如果没有呢?看一看:医院有4个部门dept
表格:所以-使用
DUAL
:)