我听说有人提到这张桌子,但不确定它是关于什么的。
它是一种带有单个记录的虚拟表,用于在您实际上对数据不感兴趣时进行选择,而是希望在 select 语句中获得某些系统函数的结果:
例如select sysdate from dual;
请参阅http://www.adp-gmbh.ch/ora/misc/dual.html
这是一个包含一个元素的虚拟表。它很有用,因为 Oracle 不允许像这样的语句
SELECT 3+4
您可以通过编写来解决此限制
SELECT 3+4 FROM DUAL
反而。
历史
DUAL 表由 Oracle 公司的 Chuck Weiss 创建,用于提供用于连接内部视图的表:
我在 Oracle 数据字典中创建了 DUAL 表作为基础对象。它本身并不打算被看到,而是在预期被查询的视图中使用。想法是您可以对 DUAL 表执行 JOIN,并在结果中为表中的每一行创建两行。然后,通过使用 GROUP BY,可以汇总生成的连接以显示 DATA 范围和 INDEX 范围的存储量。 DUAL 这个名字似乎很适合从一个行创建一对行的过程。 1
从上面可能看不出来,但原来的 DUAL 表中有两行(因此得名)。现在它只有一排。
优化
DUAL 原本是一张表,数据库引擎在选择 DUAL 时会对该表进行磁盘 IO。该磁盘 IO 通常是逻辑 IO(不涉及物理磁盘访问),因为磁盘块通常已经缓存在内存中。这导致针对 DUAL 表的大量逻辑 IO。
Oracle 数据库的更高版本已经过优化,即使 DUAL 表仍然存在,数据库也不再对 DUAL 表执行物理或逻辑 IO。
我认为这篇维基百科文章可能有助于澄清。
http://en.wikipedia.org/wiki/DUAL_table
DUAL 表是一种特殊的单行表,默认情况下出现在所有 Oracle 数据库安装中。它适用于选择伪列,例如 SYSDATE 或 USER 该表有一个名为 DUMMY 的 VARCHAR2(1) 列,其值为“X”
这是Oracle中的特殊表。我经常用它来计算或检查系统变量。例如:
select 2*4 from dual 打印出计算结果
Select sysdate from dual 打印服务器当前日期。
一种可以运行命令并返回结果的伪表,例如 sysdate。还可以帮助您检查 Oracle 是否已启动并检查 sql 语法等。
Oracle 中只有 1 行 1 列的实用程序表。它用于执行许多算术运算,通常可用于需要生成已知输出的地方。
选择 * 从双;
将给出单行,单列名为“DUMMY”,值为“X”,如下所示:
假人 ----- X
DUAL 表是一种特殊的单行表,默认情况下出现在所有 Oracle 数据库安装中。适用于选择 SYSDATE 或 USER 等伪列
该表有一个名为 DUMMY 的 VARCHAR2(1) 列,其值为“X”
您可以在 http://en.wikipedia.org/wiki/DUAL_table 中阅读所有相关信息
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
在这里完成了激动人心的实验,以及汤姆更激动人心的解释
DUAL 我们主要用于从序列中获取下一个数字。
语法:SELECT 'sequence_name'.NEXTVAL FROM DUAL
这将返回一行一列的值(NEXTVAL 列名)。
另一种需要 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 Recipes”一书
DUAL 是特殊的一行一列表,默认情况下出现在所有 Oracle 数据库中。 DUAL 的所有者是 SYS。
DUAL 是由 Oracle 数据库与数据函数一起自动创建的表。它总是用于获取操作系统函数(如日期、时间、算术表达式等)
SELECT SYSDATE from dual;
这是一个放入 from 的对象,返回 1 个空行。例如:从对偶中选择1;返回 1
从对偶中选择 21+44;返回 65
从对偶中选择 [sequence].nextval;返回序列中的下一个值。
不定期副业成功案例分享