在Oracle中select没有FROM子句
在SQL Server中可以执行一个SELECT,而不用引用一个表; 就像是:
Select 1.2 +3, 'my dummy string'
由于Oracle不允许没有FROM的SELECT,所以我使用双表进行这种操作。 就像是:
Select 1,2+3, 'my dummy string' FROM DUAL
有一个更好的方法来做这种types的查询? 使用双重表格是一个好习惯?
不,在Oracle
中没有没有FROM
没有。
使用dual
表是一个很好的做法。
dual
是一个内存表。 如果不从中selectDUMMY
,则使用不需要I/O
的特殊访问path( FAST DUAL
)。
曾几何时, dual
有两个logging(因此名称),并打算作为虚拟logging集重复loggingjoin。
现在它只有一个logging,但是你仍然可以用它生成任意数量的行:
SELECT level FROM dual CONNECT BY level <= 100
MySQL
也支持dual
(以及从无到有的语法)。
不要忘记,大多数情况下你并不需要使用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; ...
使用双重表格是很好的做法
是的,双桌通常用于这个确切的目的。 在没有可供select的表格的情况下,这在Oracle中非常标准。
我认为你必须使用双重。 当您需要运行没有表名的SQL时使用它。 我不能说我使用它比在SQL脚本以外的其他东西运行的date或愚蠢的东西。
是的,双表是在Oracle中执行此操作的常用方法。 事实上,这只是为了这个。
DUAL的主要优点在于Oracle中的优化器知道它是特殊的,所以使用它的查询可以比使用自己创build的单行表更快。 除此之外,没有什么特别的。
实际上,SQL Server的实现是非标准的。 SQL-92标准 (第7.9节)在SELECT语句中需要一个FROM子句。 DUAL是Oracle提供从中select以获得标量行的表格的方式。