oracle_dual详解.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
神秘的 ORACLE DUAL DUAL ? 有什么神秘的? 当你想得到ORACLE系统时间, 简简单单敲一行SQL不就得了吗? 故弄玄虚….       SQL select sysdate from dual;       SYSDATE   ??? ---------       02-DEC-07      哈哈, 确实DUAL的使用很方便. 但是大家知道DUAL倒底是什么OBJECT, 它有什么特殊的行为吗? 来,我们一起看一看.       首先搞清楚DUAL是什么OBJECT :       SQL connect system/manager       Connected.       SQL select owner, object_name , object_type from dba_objects where object_name like %DUAL%;       OWNER OBJECT_NAME OBJECT_TYPE       --------------- --------------- -------------       SYS DUAL TABLE       PUBLIC DUAL SYNONYM       原来DUAL是属于SYS schema的一个表,然后以PUBLIC SYNONYM的方式供其他数据库USER使用.       再看看它的结构:       SQL desc dual       Name Null? Type       ----------------------------------------- -------- ----------------------------       DUMMY VARCHAR2(1)       SQL       只有一个名字叫DUMMY的字符型COLUMN .       然后查询一下表里的数据:       SQL select dummy from dual;       DUMMY       ----------       X          哦, 只有一条记录, 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表中只返回一条记录.当然这写内部操作是不可见的 .       看来ORACLE真是蕴藏着无穷的奥妙啊!       附: ORACLE关于DUAL表不同寻常特性的解释       There is internalized code that makes this happen. Code checks that ensure that a table scan of SYS.DUAL only returns one

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档