我听说有人提到这张桌子,不知道它是什么。
答案 0 :(得分:213)
这是一种虚拟表,其中有一条记录用于选择何时您实际上对数据不感兴趣,而是希望在select语句中使用某些系统函数的结果:
e.g。 select sysdate from dual;
答案 1 :(得分:74)
它是一个虚拟表,其中包含一个元素。它很有用,因为Oracle不允许使用
之类的语句 SELECT 3+4
您可以通过编写
来解决此限制 SELECT 3+4 FROM DUAL
代替。
答案 2 :(得分:66)
<强>记录
DUAL表由Oracle公司的Chuck Weiss创建,用于提供加入内部视图的表格:
我创建了DUAL表作为Oracle数据字典中的底层对象。它从来没有被人看到过,而是被使用了 在一个预计会被查询的视图中。这个想法就是你 可以对DUAL表执行JOIN并在结果中创建两行 对于表中的每一行。然后,通过使用GROUP BY, 可以汇总结果连接以显示存储量 DATA范围和INDEX范围。这个名字,DUAL,似乎 适合从一个创建一对行的过程。 1
从上面可能不是很明显,但原始的DUAL表中有两行(因此它的名字)。现在它只有一行。
<强>优化强>
DUAL最初是一个表,当从DUAL中选择时,数据库引擎将在表上执行磁盘IO。此磁盘IO通常是逻辑IO(不涉及物理磁盘访问),因为磁盘块通常已缓存在内存中。这导致了对DUAL表的大量逻辑IO。
Oracle数据库的更高版本已经过优化,数据库不再在DUAL表上执行物理或逻辑IO,即使DUAL表仍然存在。
答案 3 :(得分:20)
我认为这篇维基百科文章可能有助于澄清。
http://en.wikipedia.org/wiki/DUAL_table
DUAL表是一个特殊的一行 表默认存在于所有Oracle中 数据库安装。这很合适 用于选择伪列 例如SYSDATE或USER表有 一个名为VARCHAR2(1)的列 DUMMY的值为“X”
答案 4 :(得分:10)
这是Oracle中的特殊表。我经常用它来计算或检查系统变量。例如:
Select 2*4 from dual
打印出计算结果Select sysdate from dual
打印服务器当前日期。 答案 5 :(得分:4)
一种伪表,你可以运行命令并获取结果,例如sysdate。还可以帮助您检查Oracle是否已启动并检查sql语法等。
答案 6 :(得分:4)
Oracle中的实用程序表,只有1行和1列。它用于执行许多算术运算,通常可以在需要生成已知输出的地方使用。
SELECT * FROM dual;
将给出一行,其中一列名为“DUMMY”,值为“X”,如下所示:
DUMMY ----- X
答案 7 :(得分:3)
关于DUAL的更多事实......
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1562813956388
在这里完成了令人激动的实验,以及Tom的更多令人兴奋的解释
答案 8 :(得分:2)
DUAL表是所有Oracle数据库安装中默认存在的特殊单行表。它适用于选择伪列,例如SYSDATE或USER
该表有一个名为DUMMY的VARCHAR2(1)列,其值为“X”
中阅读所有相关信息答案 9 :(得分:1)
在PL / SQL开发中,对于使用仅在SQL
中可用的函数,DUAL是必需的e.g。
DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;
答案 10 :(得分:0)
这是一个从该返回1空行放入的对象。例如: 从双重中选择1; 返回1
从双重中选择21 + 44; 返回65
从双重中选择[sequence] .nextval; 返回序列中的下一个值。
答案 11 :(得分:0)
DUAL我们主要用于从序列中获取下一个数字。
语法:SELECT'sequence_name'.NEXTVAL FROM DUAL
这将返回一行一列值(NEXTVAL列名)。
答案 12 :(得分: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食谱”一书
答案 13 :(得分:0)
DUAL是所有Oracle数据库中默认存在的特殊的一行,一列表。 DUAL的所有者是SYS。
DUAL是Oracle数据库与数据功能一起自动创建的表。始终用于获取操作系统功能(例如日期,时间,算术表达式等)
SELECT SYSDATE from dual;