Oracle中的双表是什么?


Answers:



79

它是一个虚拟表,其中包含一个元素。这很有用,因为Oracle不允许使用以下语句

 SELECT 3+4

您可以通过以下方式解决此限制:

 SELECT 3+4 FROM DUAL

代替。


70

来自维基百科

历史

DUAL表是由Oracle公司的Chuck Weiss创建的,用于提供用于内部视图联接的表:

我将DUAL表创建为Oracle数据字典中的基础对象。从来没有想过要看到它本身,而是在希望查询的视图中使用它。想法是您可以对DUAL表进行JOIN并为表中的每一行在结果中创建两行。然后,通过使用GROUP BY,可以汇总结果联接以显示DATA扩展区和INDEX扩展区的存储量。名称DUAL似乎很适合仅从一个行创建一对行的过程。1个

从上面可能看不出来,但是原始DUAL表中有两行(因此得名)。如今,它只有一行。

优化

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

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


21

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

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

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


10

这是Oracle中的特殊表。我经常将其用于计算或检查系统变量。例如:

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

4

您可以针对某种伪表运行命令并获取结果,例如sysdate。还可以帮助您检查Oracle是否已启动并检查sql语法等。


4

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

SELECT * FROM dual;

将给出单行,并带有名为“ DUMMY”的单列和值为“ X”的值,如下所示:

DUMMY
----- 
X


2

DUAL表是一种特殊的单行表,默认情况下在所有Oracle数据库安装中都存在。它适用于选择伪列,例如SYSDATE或USER

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

您可以在http://en.wikipedia.org/wiki/DUAL_table中阅读全部内容


1

使用仅在SQL中可用的功能,在PL / SQL开发中必须使用DUAL

例如

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

0

从返回1空行中放入的对象。例如:从对偶中选择1;在对偶中选择1。返回1

从双选21 + 44; 返回65

从对偶中选择[sequence] .nextval;返回序列中的下一个值。


0

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

语法:SELECT'sequence_name'.NEXTVAL FROM DUAL

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


1
从11g开始就没有必要了。序列可以在PL / SQL中本地使用。
乔恩·海勒2014年

0

另一个需要解决的情况 select ... from dual 是,当我们想使用内置DBMS_METADATA.GET_DDL函数检索不同数据库对象(例如TABLE,FUNCTION,TRIGGER,PACKAGE)的代码(数据定义)时:

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食谱》


0

DUAL是特殊的一行,一列表在所有Oracle数据库中默认存在。DUAL的所有者是SYS。

DUAL是由Oracle数据库自动创建的表以及数据功能。它总是用于获取操作系统功能(例如日期,时间,算术表达式等)。

SELECT SYSDATE from dual;  
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.