标题 神秘的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
分享到:
相关推荐
《J2ME UI控件详解:FATCAT_Snail_GUI_2.1深度解析》 J2ME,全称Java Micro Edition,是Java平台的一个重要分支,主要用于嵌入式设备和移动设备上的应用程序开发。在J2ME中,用户界面(UI)的设计和实现对于提升...
玩客云刷机包s805-flash-snail.img
这里提到的`s805_flash_snail.img`很可能是专为玩客云设计的固件版本,其中`s805`可能代表设备所采用的处理器型号,而`flash_snail`可能指的是该固件是针对“蜗牛”(玩客云的别称)的闪存更新。 接着,提到了"WKY-...
从给定的文件信息中,我们可以看出,这是一个名为“Snail博客项目”的源代码压缩包。这个项目可能是一个基于某种编程语言开发的博客系统。由于提供的信息较为有限,我们无法直接得知该项目所使用的技术栈和具体功能...
1.一键安装,可以在软件管理界面里配置插件,及删除远程腾讯COS里的文件及新建文件夹 1.可以在计划任务里,直接选择腾讯COS作为备份路径 3.可以设置保留备份
【描述】中提到的内容包括“RoboMaster Snail 2305 直流无刷电机说明书”和“snail_2305_brushless_dc_motor SOLIDWORKS模型”。直流无刷电机是一种先进的电动机类型,具有无碳刷结构,减少了摩擦和磨损,提高了效率...
s805刷机工具
在这个名为"snail:snail_test"的项目中,我们可能遇到的是一个以蜗牛为主题的网页设计或者一个与蜗牛相关的软件界面,而"snail_master"可能是项目的主分支或主目录名,暗示了这个项目的核心部分。 首先,让我们深入...
Amlogic S905是一款由晶晨半导体(Amlogic)推出的高性能、低功耗的系统级芯片(SoC),主要用于智能电视盒、OTT设备以及其他的嵌入式多媒体应用。这款处理器集成了四核ARM Cortex-A53 CPU和Mali-450 GPU,能够提供...
本文将详细介绍一款名为snail-job的分布式任务重试与调度平台的设计与实现。该平台以Java作为核心开发语言,并融入了多种其他编程语言与技术,旨在提供一个灵活、可靠且快速的分布式任务处理解决方案。 首先,snail...
stm32cubeide使用入门 ...驱动snail的电调叫430-R电调,12v供电(现在大疆又出了一款C615电调,24v供电) 我选用的是普通油门信号:30-500Hz的PWM信号,我设定的是500Hz 软件环境 STM32CubeIDE1.1.0 package version :
晶晨S805是一款基于ARM架构的系统级芯片,主要应用于智能电视盒、网络机顶盒等设备,提供高效能的多媒体处理能力。这款安卓固件是专门为搭载晶晨S805芯片的设备设计的,用于更新或恢复设备的操作系统。...
玩客云刷机软件+玩客云刷机固件+固件刷写软件+openwrt固件+手把手教学视频+注意事项 openwrt固件包含特殊功能、QOS功能以及去除广告功能 适用于新旧两个版本的玩客云,都有手把手教学,一定祝你刷机成功!...
本压缩包“Oracle9i-snail.rar”可能包含了一个详细的Oracle 9i安装指南,名为“安装Oracle9i-snail.doc”。下面将详细介绍Oracle 9i的安装过程及相关知识点。 1. **系统需求**:在开始安装前,必须确保你的计算机...
【标题】"acgist-snail-master_java_" 是一个开源项目,主要基于Java语言开发,尤其采用了先进的微服务框架redkale。这个项目的核心是构建一个社区系统,它以极简的设计理念、高度可扩展的架构以及对JDK 8及更高版本...
《宝塔系统安装HUSTOJ指南v0.21》 在信息技术领域,搭建在线编程竞赛平台(如HUSTOJ)对于教学和实践有着重要作用。本文将详细阐述如何在宝塔系统上安装和配置HUSTOJ,以便用户能够高效地运行和管理这个系统。...
RoboMaster Snail 2305是一款专为高性能应用设计的无感外转子直流无刷电机。这款电机以其高转速、低噪音、优良的散热能力和高功率密度为特点,广泛应用于多旋翼飞行器、竞技机器人以及科研教育等领域。其无感设计...
在"无代码绑定数据Snail-2.0"中,"Snail"可能代表该技术或产品的核心库或框架,而"2.0"通常表示这是一个升级版本,相比之前的版本可能包含了新的特性、性能优化或者更好的用户体验。这种技术的核心目标是让用户能够...
Snail Language是一款个人开发的语言语言,目标是成为一款.NET语言。目前版本为0.143,计划于0.5版本开源。