标题 神秘的DUAL black_snail(原作)
关键字 ORACLE DUAL
DUAL ? 有什么神秘的? 当你想得到ORACLE系统时间,简简单单敲一行SQL
不就得了吗? 故弄玄虚….
SQL> select sysdate from dual;
SYSDATE
---------
28-SEP-03
哈哈, 确实DUAL的使用很方便. 但是大家知道DUAL倒底是什么OBJECT,它有什么特殊的行为吗? 来,我们一起看一看.
首先搞清楚DUAL是什么OBJECT :
SQL> connect system/manager
Connected.
SQL> select owner, object_name , object_type from dba_objectswhere object_name like '%DUAL%';
OWNER OBJECT_NAME OBJECT_TYPE
--------------- --------------- -------------
SYS DUAL TABLE
PUBLIC DUAL SYNONYM
原来DUAL是属于SYS schema的一个表,然后以PUBLICSYNONYM的方式供其他数据库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 thatensure
that a table scan of SYS.DUAL only returns one row. Svrmgrlbehaviour is
incorrect but this is now an obsolete product.
The base issue you should always remember and keep is: DUAL tableshould always
have 1 ROW. Dual is a normal table with one dummy column ofvarchar2(1).
This is basically used from several applications as a pseudo tablefor
getting results from a select statement that use functions likesysdate or other
prebuilt or application functions. If DUAL has no rows at all someapplications
(that use DUAL) may fail with NO_DATA_FOUND exception. If DUAL hasmore than 1
row then applications (that use DUAL) may fail with TOO_MANY_ROWSexception.
So DUAL should ALWAYS have 1 and only 1 row
分享到:
相关推荐
FATCAT_Snail_GUI_2.1是一套J2ME简易的UI包,拥有基本主件。附有讲解。
USB_Burning_Tool软件烧录 s805_flash_snail.img 固件WKY-Armbian_20.12_5.9.0固件等
1.一键安装,可以在软件管理界面里配置插件,及删除远程腾讯COS里的文件及新建文件夹 1.可以在计划任务里,直接选择腾讯COS作为备份路径 3.可以设置保留备份
S905原理图,Amlogic S905设计资料,晶晨S905
snail:snail_test
大疆电机Snail_2305资料 包含: RoboMaster Snail 2305 直流无刷电机说明书 snail_2305_brushless_dc_motor SOLIDWORKS模型
s805的固件
安装Oracle9i-snail.rar
玩客云刷机软件+玩客云刷机固件+固件刷写软件+openwrt固件+手把手教学视频+注意事项 openwrt固件包含特殊功能、QOS功能以及去除广告功能 适用于新旧两个版本的玩客云,都有手把手教学,一定祝你刷机成功!...
简介RoboMaster Snail 2305 是一款无感外转子直流无刷电机,具备高转速、低噪音、良好散热、大功率密度等特性,可广泛应用于多旋翼飞行器、对战机器
stm32cubeide使用入门 ...驱动snail的电调叫430-R电调,12v供电(现在大疆又出了一款C615电调,24v供电) 我选用的是普通油门信号:30-500Hz的PWM信号,我设定的是500Hz 软件环境 STM32CubeIDE1.1.0 package version :
无代码绑定数据Snail-2.0,蜗牛控件
Snail Language是一款个人开发的语言语言,目标是成为一款.NET语言。目前版本为0.143,计划于0.5版本开源。
使用Doxygen可以生成图文并茂的便于程序阅读的文档,但若要生成带目录的CHM文档,iconv,utf82gbk.bat和makechm.bat可以帮助你搞定。http://blog.csdn.net/xk_snail有具体的使用方法,欢迎大家交流。
FATCAT Snail GUI 2.0开发包 ================================================================ FATCAT Snail GUI 是由北京航空航天大学FATCAT 团队开发的、Java ME 平台上的应用程序展现层开发包。使用Snail ...
一款超级好用的截图软件,可以滚动长截屏,也可以自定义截图。
基于全新微服务框架redkale实现,极简、易扩展、jdk8+、高性能社区系统;ArangoDb异步记录日志
The.Snail.v1.2.9.WiN-R2R,音高分析软件
mindmaster是一款非常轻巧好用的绘制思维导图的软件,很多现成的模板,超级奈斯。
转录因子Snail与肺纤维化关系的研究进展,陈程,罗自强,特发性肺纤维化是一种以活化的成纤维细胞和大量细胞外基质沉淀聚集为特征的致死性肺间质疾病。近年来,研究发现肺纤维化的一个重