我听到有人提到过这张桌子,但不确定它是关于什么的。
当前回答
DUAL是PL/SQL开发中使用仅在SQL中可用的函数所必需的
e.g.
DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;
其他回答
从维基百科
历史
DUAL表是由Oracle公司的Chuck Weiss创建的,用于提供一个连接内部视图的表:
I created the DUAL table as an underlying object in the Oracle Data Dictionary. It was never meant to be seen itself, but instead used inside a view that was expected to be queried. The idea was that you could do a JOIN to the DUAL table and create two rows in the result for every one row in your table. Then, by using GROUP BY, the resulting join could be summarized to show the amount of storage for the DATA extent and for the INDEX extent(s). The name, DUAL, seemed apt for the process of creating a pair of rows from just one. 1
从上面可能看不太明显,但原来的DUAL表中有两行(因此得名)。现在它只有一行。
优化
DUAL最初是一个表,当从DUAL中进行选择时,数据库引擎将对表执行磁盘IO。这个磁盘IO通常是逻辑IO(不涉及物理磁盘访问),因为磁盘块通常已经缓存在内存中。这导致了针对DUAL表的大量逻辑IO。
Oracle数据库的后续版本已经进行了优化,数据库不再对DUAL表执行物理或逻辑IO,即使DUAL表仍然存在。
DUAL表是一个特殊的单行表,默认存在于所有Oracle数据库安装中。它适合用于选择伪列,如SYSDATE或USER
该表有一个名为DUMMY的VARCHAR2(1)列,其值为“X”
你可以在http://en.wikipedia.org/wiki/DUAL_table上阅读所有相关信息
DUAL是一种特殊的单行一列表,默认存在于所有Oracle数据库中。DUAL的所有者是SYS。
DUAL是Oracle数据库与数据函数一起自动创建的表。它总是用于获取操作系统函数(如日期、时间、算术表达式)。等)。
SELECT SYSDATE from dual;
它是一个放入from返回1空行的对象。例如: Select 1 from dual; 返回1
从dual中选择21+44; 返回65
选择(序列)。Nextval from dual; 返回序列中的下一个值。
它是一个包含一个元素的虚拟表。它很有用,因为Oracle不允许这样的语句
SELECT 3+4
您可以通过编写来绕过这个限制
SELECT 3+4 FROM DUAL
代替。
推荐文章
- SQL在Oracle中连接多行列值的查询
- GROUP BY with MAX(DATE)
- 如何从Oracle的表中获取列名?
- 数据库性能调优有哪些资源?
- Oracle中表名的最大长度是多少?
- oracle中的RANK()和DENSE_RANK()函数有什么区别?
- 什么时候我需要在Oracle SQL中使用分号vs斜杠?
- 如何在Oracle SQL开发人员中找到引用给定表的表?
- 如何在Oracle SQL开发人员中设置自定义日期时间格式?
- 为什么Oracle 9i将空字符串视为NULL?
- NVL和Coalesce之间的Oracle差异
- 不可重复读和幻影读的区别是什么?
- ORA-00054:资源繁忙,指定NOWAIT或超时获取
- Oracle中的双表是什么?
- Oracle中不区分大小写的搜索