Oracle中的双重表格是什么?

我听到有人提到这张桌子,不知道是怎么回事。

这是一种具有单个logging的虚拟表,用于select何时对数据没有真正的兴趣,而是希望在select语句中使用某个系统函数的结果:

例如select sysdate from dual;

http://www.adp-gmbh.ch/ora/misc/dual.html

从维基百科

历史

DUAL表由Oracle公司的Chuck Weiss创build,提供一个join内部视图的表格:

我在Oracle数据字典中创build了DUAL表作为基础对象。 它本来不是要被看到,而是被用在一个预期会被质疑的观点之内。 这个想法是,你可以做一个JOIN到DUAL表,并在结果中为表中的每一行创build两行。 然后,通过使用GROUP BY,可以汇总生成的连接,以显示DATA范围和INDEX范围的存储量。 DUAL这个名字似乎适用于从一个行创build一对行的过程。 1

从上面可能不明显,但原来的DUAL表有两行(因此它的名字)。 现在它只有一行。

优化

DUAL最初是一个表,当从DUAL中select时,数据库引擎将在表上执行磁盘IO。 这个磁盘IO通常是逻辑IO(不涉及物理磁盘访问),因为磁盘块通常已经被caching在内存中。 这导致了针对DUAL表的大量逻辑IO。

Oracle数据库的更新版本已经过优化,即使DUAL表仍然存在,数据库也不再在DUAL表上执行物理或逻辑IO。

这是一个有一个元素的虚拟桌子。 这很有用,因为Oracle不允许像这样的语句

  SELECT 3+4 

你可以通过写作来解决这个限制

  SELECT 3+4 FROM DUAL 

代替。

我认为这个维基百科文章可能有助于澄清。

http://en.wikipedia.org/wiki/DUAL_table

DUAL表是所有Oracle数据库安装中默认存在的特殊的单行表。 它适用于select伪列,如SYSDATE或USER该表具有一个名为DUMMY的VARCHAR2(1)列,其值为“X”

这是Oracle的特殊表格。 我经常用它来计算或检查系统variables。 例如:

  • Select 2*4 from dual打印中Select 2*4 from dual打印出计算结果
  • Select sysdate from dual打印服务器当前date。

Oracle中只有1行1列的实用程序表。 它用于执行许多算术运算,通常可以用于需要生成已知输出的地方。

SELECT * FROM dual;

会给出一个单行,一个名为“DUMMY”的列和一个值“X”,如下所示:

 DUMMY ----- X 

你可以运行一些命令来获取结果,比如sysdate。 还可以帮助你检查Oracle是否启动并检查SQL语法等。

关于DUAL更多的事实….

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1562813956388

在这里做了惊心动魄的实验,汤姆做了更多惊心动魄的解释

DUAL表是所有Oracle数据库安装中默认存在的特殊的单行表。 它适用于select伪列,如SYSDATE或USER

该表具有一个名为DUMMY的VARCHAR2(1)列,其值为“X”

你可以在http://en.wikipedia.org/wiki/DUAL_table中阅读所有关于它的内容;

在PL / SQL开发中,DUAL是使用仅在SQL中可用的函数所必需的

例如

 DECLARE x XMLTYPE; BEGIN SELECT xmlelement("hhh", 'stuff') INTO x FROM dual; END; 

这是一个对象,从那里返回一个空行。 例如:从双重select1; 返回1

从双重select21 + 44; 返回65

从双select[sequence] .nextval; 返回序列中的下一个值。

DUAL我们主要用于从序列中获取下一个数字。

语法:SELECT'sequence_name'.NEXTVAL FROM DUAL

这将返回一行一列值(NEXTVAL列名)。

Interesting Posts