Oracle中神秘的DUAL表的探究
只有一条记录, DUMMY的值是’X’ .很正常啊,没什么奇怪嘛. 好,下面就有奇妙的东西出现了!
插入一条记录:
SQL>; connect sys as sysdba
![]()
Connected.
![]()
SQL>; insert into dual values ( 'Y');
![]()
1 row created.
![]()
SQL>; commit;
![]()
Commit complete.
![]()
SQL>; select count(*) from dual;
![]()
COUNT(*)
![]()
----------
![]()
2
迄今为止,一切正常. 然而当我们再次查询记录时,奇怪的事情发生了
SQL>; select * from dual;
![]()
DUMMY
![]()
----------
![]()
X
刚才插入的那条记录并没有显示出来 ! 明明DUAL表中有两条记录, 可就是只显示一条!
再试一下删除 ,狠一点,全删光 !
SQL>; delete from dual; /**//*注意没有限定条件,试图删除全部记录*/
![]()
1 row deleted.
![]()
SQL>; commit;
![]()
Commit complete.
也只有一条记录被删掉,
SQL>; select * from dual;
![]()
DUMMY
![]()
----------
![]()
Y
为什么会这样呢? 难道SQL的语法对DUAL不起作用吗?带着这个疑问, 我查询了一些ORACLE官方的资料. 原来ORACLE对DUAL表的操作做了一些内部处理,尽量保证DUAL表中只返回一条记录.当然这写内部操作是不可见的 .
0
相关文章
