我听到有人提到过这张桌子,但不确定它是关于什么的。
我认为维基百科的这篇文章可能有助于澄清。
http://en.wikipedia.org/wiki/DUAL_table
DUAL表是一个特殊的单行表 表默认存在于所有Oracle中 数据库安装。这是合适的 用于选择伪列 例如SYSDATE或USER表有 一个单独的VARCHAR2(1)列称为 值为“X”的DUMMY
这是一种伪表,您可以对其运行命令并获得结果,例如sysdate。还可以帮助您检查Oracle是否启动和检查sql语法等。
它是一种虚拟表,只有一条记录,用于在你实际上对数据不感兴趣时进行选择,而是希望在选择语句中获得一些系统函数的结果:
例如select sysdate from dual;
select sysdate from dual;
看到http://www.adp-gmbh.ch/ora/misc/dual.html
截至23c, Oracle支持select sysdate /* or other value */,而不支持from dual,因为MySQL已经支持了一段时间。
select sysdate /* or other value */
from dual
它是Oracle中的特殊表。我经常用它来计算或检查系统变量。例如:
Select 2*4 from dual
Select sysdate from dual
它是一个包含一个元素的虚拟表。它很有用,因为Oracle不允许这样的语句
SELECT 3+4
您可以通过编写来绕过这个限制
SELECT 3+4 FROM DUAL
代替。
它是一个放入from返回1空行的对象。例如: Select 1 from dual; 返回1 < / p >
select 21+44 from dual; 返回65 < / p > < p >选择(序列)。Nextval from dual;
DUAL表是一个特殊的单行表,默认存在于所有Oracle数据库安装中。它适合用于选择伪列,如SYSDATE或USER
该表有一个名为DUMMY的VARCHAR2(1)列,其值为“X”
你可以在http://en.wikipedia.org/wiki/DUAL_table中读到所有关于它的内容
从维基百科
历史
DUAL表是由Oracle公司的Chuck Weiss创建的,用于提供一个连接内部视图的表:
我在Oracle数据字典中创建了DUAL表作为底层对象。它本身从来就不是用来看的,而是用来用的 在期望被查询的视图中。我的意思是你 可以做一个JOIN到DUAL表,并在结果中创建两行 对于表中的每一行。然后,通过使用GROUP by,将 可以汇总结果连接,以显示存储的数量 DATA区段和INDEX区段。这个名字,DUAL,似乎 适用于从一行创建一对行的过程。1 < / em > < / p >
从上面可能看不太明显,但原来的DUAL表中有两行(因此得名)。现在它只有一行。
优化
DUAL最初是一个表,当从DUAL中进行选择时,数据库引擎将对表执行磁盘IO。这个磁盘IO通常是逻辑IO(不涉及物理磁盘访问),因为磁盘块通常已经缓存在内存中。这导致了针对DUAL表的大量逻辑IO。
Oracle数据库的后续版本已经进行了优化,数据库不再对DUAL表执行物理或逻辑IO,即使DUAL表仍然存在。
DUAL是PL/SQL开发中使用仅在SQL中可用的函数所必需的
如。
DECLARE x XMLTYPE; BEGIN SELECT xmlelement("hhh", 'stuff') INTO x FROM dual; END;
关于DUAL的更多事实....
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1562813956388
这里做的令人激动的实验,还有汤姆更令人激动的解释
Oracle中只有1行1列的实用程序表。它被用来执行一些算术运算,通常可以用于需要生成已知输出的地方。
SELECT * FROM dual;
将给出一个单行,一个名为“DUMMY”的列和一个值“X”,如下所示:
DUMMY ----- X
DUAL主要用于从序列中获取下一个数字。
语法:SELECT 'sequence_name'。Nextval from dual
这将返回一行一列的值(NEXTVAL列名)。
另一种需要select ... from dual的情况是,当我们想要检索不同数据库对象(如TABLE、FUNCTION、TRIGGER、PACKAGE)的代码(数据定义)时,使用内置的DBMS_METADATA.GET_DDL函数:
select ... from dual
DBMS_METADATA.GET_DDL
select DBMS_METADATA.GET_DDL('TABLE','<table_name>') from DUAL; select DBMS_METADATA.GET_DDL('FUNCTION','<function_name>') from DUAL;
的确,现在的ide确实提供了查看表的DDL的功能,但是在SQL Plus这样的简单环境中,这是非常方便的。
编辑
更一般的情况:基本上,当我们需要在标准SQL语句中使用任何PL/SQL过程时,或者当我们想从命令行调用一个过程时:
select my_function(<input_params>) from dual;
这两个食谱都摘自Josh Juneau和Matt Arena所著的《Oracle PL/SQL recipes》一书
DUAL是一种特殊的单行一列表,默认存在于所有Oracle数据库中。DUAL的所有者是SYS。
DUAL是Oracle数据库与数据函数一起自动创建的表。它总是用于获取操作系统函数(如日期、时间、算术表达式)。等)。
SELECT SYSDATE from dual;