dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。我们可以用它来做很多事情,如下:

  1、查看当前用户,可以在 SQL Plus中执行下面语句 select user from dual;

  2、用来调用系统函数

  select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--获得当前系统时间

  select SYS_CONTEXT('USERENV','TERMINAL') from dual;--获得主机名

  select SYS_CONTEXT('USERENV','language') from dual;--获得当前 locale

  select dbms_random.random from dual;--获得一个随机数

  3、得到序列的下一个值或当前值,用下面语句

  select your_sequence.nextval from dual;--获得序列your_sequence的下一个值

  select your_sequence.currval from dual;--获得序列your_sequence的当前值

  4、可以用做计算器 select 7*9 from dual;

  ------

  Oracle系统中dual表是一个“神秘”的表,网上有很多网友都对该表进行了测试,该表只有一行一列,其实该表和系统中的其他表一样,一样可以执行插入、更新、删除操作,还可以执行drop操作。但是不要去执行drop表的操作,否则会使系统不能用,数据库起不了,会报Database startup crashes with ORA-1092错误。此时也不要慌乱,可以通过执行以下步骤来进行恢复。可以用sys用户登陆。

  SQL> create pfile=’d:pfile.bak’ from spfile

  SQL> shutdown immediate

  在d:pfile.bak文件中最后加入一条:

  replication_dependency_tracking = FALSE

  重新启动数据库:

  SQL> startup pfile=’d:pfile.bak’

  SQL> create table “sys”.”DUAL”

  [an error occurred while processing this directive]

  =====

  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_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表用途及结构详解的更多相关文章

  1. Oracle 建表常用数据类型的详解

    创建表时,必须为表的各个列指定数据类型.如果实际的数据与该列的数据类型不相匹配,则数据库会拒绝保存.如为学生指定出生日期为“1980-13-31”. 在Oracle中,常见的数据类型有: 字符串:字符 ...

  2. oracle入坑日记<三>用户详解(角色理解)

    1   用户是什么 1.1.权限管理是Oracle的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限.Oracle 的权限分为系统权限和数据对象权限,共一百多种.如果把Oracl ...

  3. oracle数据库定时任务dbms_job的用法详解

    本文来源:Ruthless <oracle数据库定时任务dbms_job的用法详解> 一.dbms_job涉及到的知识点   1.创建job: variable jobno number; ...

  4. 小甲鱼PE详解之输入表(导出表)详解(PE详解09)

    小甲鱼PE详解之输出表(导出表)详解(PE详解09) 当PE 文件被执行的时候,Windows 加载器将文件装入内存并将导入表(Export Table) 登记的动态链接库(一般是DLL 格式)文件一 ...

  5. Oracle GoldenGate中HANDLECOLLISIONS参数使用详解

    Oracle GoldenGate中HANDLECOLLISIONS参数使用详解   HANDLECOLLISIONS 是一个 replicat 进程参数,主要在 initial load 中使用.在 ...

  6. Oracle Database 12c Release 2安装详解

    第1章 Oracle Database 12c Release 2安装详解 1.1 下载方法 oracle官网https://www.oracle.com 1)打开官方网站,找到下载连接 2)选择更多 ...

  7. PHP扩展代码结构详解

    PHP扩展代码结构详解: 这个是继:使用ext_skel和phpize构建php5扩展  内容 (拆分出来) Zend_API:深入_PHP_内核:http://cn2.php.net/manual/ ...

  8. Linux文件系统的目录结构详解

    Linux文件系统的目录结构详解   一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...

  9. Oracle中用exp/imp命令参数详解【转】

    Oracle中用exp/imp命令参数详解 [用 exp 数 据 导 出]:1  将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中   exp sy ...

随机推荐

  1. 家校通Code

    9 http://dlwt.csdn.net/fd.php?i=621573845033702&s=44d46a459acce7fef39aa4dcff51bfba

  2. Literals

    Uppercase or lowercase L means long (however, using a lowercase l is confusing because it can look l ...

  3. wall命令

    wall——发送广播信息 write all /usr/bin/wall 示例1: # wall 输入命令之后回车便可以广播消息,如输入Hello everybody online后Ctrl+D结束并 ...

  4. 爬去豆瓣图书top250数据存储到csv中

    from lxml import etree import requests import csv fp=open('C://Users/Administrator/Desktop/lianxi/do ...

  5. 如何将SAP Multi Target应用部署到SAP云平台的Cloud Foundry环境去

    SHINA是SAP HANA Interactive Education的缩写,是一个demo应用,用于演示如何开发SAP HANA原生应用. 这个应用包含了sample数据以及HANA数据库表,vi ...

  6. 【UML】对象图Object diagram(转)

    http://blog.csdn.net/sds15732622190/article/details/48894751 前言 今天要说的是UML中的对象图.他与类图,合作图都有关系,是类图的实例化. ...

  7. Python-OpenCV中的cv2.inpaint()函数

    概念 修复是图像插值.数字修复算法在图像插值,照片恢复,缩放和超分辨率等方面具有广泛的应用. 大多数人会在家里放一些旧的退化照片,上面有一些黑点,一些笔画等.你有没有想过恢复它?我们不能简单地在绘画工 ...

  8. SpringMVC-请求参数的绑定

    绑定的机制 表单提交的数据都是k=v格式的 username=haha&password=123 SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的 要求 ...

  9. VMware vSphere6.0 服务器虚拟化部署安装图解

    一 VMware vSphere部署的前期规划要点 1 vSphere的优点 (略) 2 如何利用现在的设备架构虚拟化环境 在虚拟化过程中,用户大多会考虑目前现有的服务器.存储.交换机等基础设备是否可 ...

  10. 利用Python的pyHook包来进行键盘监听

    最近在实习的时候发现一件很蛋疼的事情,那就是我们组的项目因为有后台进程,所有每次运行完以后后台进程都必须要自己手动关闭,每次编译之前忘记关就会有一大堆编译错误,我就想直接弄个可以快捷键直接关闭算了   ...