dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录,可以用它来做很多事情。
dual是Oracle与数据字典一起自动创建的一个表。它只有一列:dummy,其数据类型为:VARCHAR2(1)。dual中只有一行数据:'X'。dual属于SYS模式,但所有用户都可以使用dual名称访问它。用select计算常量表达式、伪列等值时常用该表,因为它只返回一行数据,而使用其它表时可能返回多个数据行。
dual是一个oracle内部表,不论我们做什么操作(不要删除记录)它都只有一条记录,上面插入了一条之后,他仍然只有1条记录,所以很多取系统时间,计算,等只要选择一条记录,而且记录内容与表内容无关的操作,我们都喜欢使用这个表。虚表(dual)是oracle提供的最小的工作表,它仅包含一行一列。对于虚表(dual)来说,其中的列往往是不相关的或无关紧要的。
查看表结构:
-
执行select * from dual;
-
里面只有一条记录,插入一条记录,insert into dual values('Y');但是dual就是个一行一列的表,如果你往里执行insert、delete、truncate操作,就会导致很多程序出问题。结果也因sql*plus、pl/sql dev等工具而异。
-
再次查询dual表,里面任然显示一条记录。刚才插入的那条记录并没有显示出来。明明DUAL表中有两条记录,可就是只显示一条。再试一下删除,全删光,也只有一条记录被删掉。
-
原来ORACLE对DUAL表的操作做了一些内部处理,尽量保证DUAL表中只返回一条记录.当然这写内部操作是不可见的。