Oracle中的双重表格是什么?
我听到有人提到这张桌子,不知道是怎么回事。
这是一种具有单个logging的虚拟表,用于select何时对数据没有真正的兴趣,而是希望在select语句中使用某个系统函数的结果:
例如select sysdate from dual;
从维基百科
历史
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”
在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列名)。