it-swarm.cn

Oracle中的双表是什么?

我听说有人提到这张桌子,不知道它是什么。

214
Brian G

它是一种带有单个记录的虚拟表,用于在您实际上对数据不感兴趣时​​进行选择,而是希望在select语句中使用某些系统函数的结果:

例如select sysdate from dual;

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

213
Sean McMains

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

 SELECT 3+4

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

 SELECT 3+4 FROM DUAL

代替。

74
mfx

来自 维基百科

历史

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

我创建了DUAL表作为Oracle数据字典中的底层对象。它本身并不意味着被看到,而是在一个预期被查询的视图中使用。想法是你可以加入到DUAL表并在表的每一行的结果中创建两行。然后,通过使用GROUP BY,可以汇总结果连接以显示DATA范围和INDEX范围的存储量。名称DUAL似乎适合从一个创建一对行的过程. 1

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

优化

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

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

66
Ivan Bosnic

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

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

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

20
Jorge Ferreira

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

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

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

SELECT * FROM dual;

将给出一行,其中一列名为“DUMMY”,值为“X”,如下所示:

DUMMY
----- 
X
4
AB01

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

4
Kevan Emmott

关于DUAL的更多事实....

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

在这里完成了令人激动的实验,以及汤姆更令人兴奋的解释

3
Venkataramesh Kommoju

DUAL表是所有Oracle数据库安装中默认存在的特殊单行表。它适用于选择SYCRATE或USER等伪列

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

你可以在 http://en.wikipedia.org/wiki/DUAL_table阅读所有相关内容

2
Sakin

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

例如.

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

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

语法:SELECT'sequence_name'.NEXTVAL FROM DUAL

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

0
Vishwa G

这是一个从该返回1空行放入的对象。例如:从双重中选择1;返回1

从双重中选择21 + 44;返回65

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

0
Gonzalo Merayo

另一种需要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这样的简单环境中,这可以非常方便。

_ edit _

更一般的情况:基本上,当我们需要在标准SQL语句中使用任何PL/SQL过程时,或者当我们想要从命令行调用过程时:

select my_function(<input_params>) from dual;

这两个食谱都来自Josh Juneau和Matt Arena的“Oracle PL/SQL Recipes”一书

0
Newton fan 01

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

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

SELECT SYSDATE from dual;  
0
Manjunatha B