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

1、查看当前用户

  1. SQL> select user from dual;
  2. USER
  3. ------------------------------
  4. SYSTEM

2、用来调用系统函数

  1. --获得当前系统时间
  2. select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
  3.  
  4. --获得主机名
  5. select SYS_CONTEXT('USERENV','TERMINAL') from dual;
  6.  
  7. --获得当前locale
  8. select SYS_CONTEXT('USERENV','language') from dual;
  9.  
  10. --获得一个随机数
  11. select dbms_random.random from dual;

3、可以用做计算器

  1. SQL> select 1+2 from dual;
  2. 1+2
  3. ----------
  4. 3

4、查看序列值

  1. SQL> create sequence aaa increment by 1 start with 1;
  2. SQL> select aaa.nextval from dual;
  3. NEXTVAL
  4. ----------
  5. 1
  6.  
  7. SQL> select aaa.currval from dual;
  8. CURRVAL
  9. ----------
  10. 1

彩蛋:

1. 查询Dual是什么Object?

  1. SQL> connect system/manager
  2. Connected.
  3.  
  4. SQL> select owner, object_name , object_type from dba_objects where object_name like '%DUAL%'; OWNER OBJECT_NAME OBJECT_TYPE
  5. --------------- --------------- -------------
  6. SYS DUAL TABLE PUBLIC DUAL SYNONYM

原来DUAL是属于SYS schema的一个表,然后以PUBLIC SYNONYM的方式供其他数据库USER使用。

2. 查询Dual的结构和数据

  1. SQL> desc dual Name Null? Type
  2. ----------------------------------------- -------- ----------------------
  3. DUMMY VARCHAR2(1)

只有一个名字叫DUMMY的字符型COLUMN。

然后查询一下表里的数据:

  1. SQL> select dummy from dual;
  2. DUMMY
  3. ----------
  4. X

3. Dual的奇妙之处

插入一条记录:

  1. SQL> connect sys as sysdba
  2. Connected.
  3.  
  4. SQL> insert into dual values ( 'Y');
  5. 1 row created.
  6.  
  7. SQL> commit;
  8. Commit complete.
  9.  
  10. SQL> select count(*) from dual;
  11. COUNT(*)
  12. ----------
  13. 2

再次查询记录时,奇怪的事情发生了:

  1. SQL> select * from dual;
  2. DUMMY
  3. ----------
  4. X

刚才插入的那条记录并没有显示出来 ! 明明DUAL表中有两条记录, 可就是只显示一条!

再试一下删除 ,狠一点,全删光!再查询

  1. SQL> delete from dual; /*注意没有限定条件,试图删除全部记录*/
  2. 1 row deleted. -- 只有一条记录被删掉
  3. 3
  4. SQL> commit;
  5. Commit complete.
  6.  
  7. SQL> select * from dual;
  8. DUMMY
  9. ----------
  10. Y

原来ORACLE对DUAL表的操作做了一些内部处理,尽量保证DUAL表中只返回一条记录.当然这写内部操作是不可见的。

dual表详解的更多相关文章

  1. oracle中的dual表详解

    oracle中的dual表详解 1.DUAL表的用途 Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中 --查看当前连接用户 SQL> s ...

  2. ORACLE DUAL表详解 .

    今天在戴明明同学的QQ空间里看到篇不错的关于DUAL表的文章,自己平时也时而会用到,可是没有系统的学习过,借这个机会学习学习~ ==================================== ...

  3. Oracle Dual 表详解

    1.DUAL表的用途Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中--查看当前连接用户SQL> select user from dua ...

  4. [转]PostgreSQL教程:系统表详解

    这篇文章主要介绍了PostgreSQL教程(十五):系统表详解,本文讲解了pg_class.pg_attribute.pg_attrdef.pg_authid.pg_auth_members.pg_c ...

  5. Oracle外部表详解(转载)

    (外部表创建主要注意创建目录访问权限问题.目录路径格式无空格等不相关字符,即必须是当前表访问用户可以访问:关于表中行数的限制问题,如果不加限制注意添加reject limit unlimited:表中 ...

  6. Oracle外部表详解

    外部表概述 外部表只能在Oracle 9i之后来使用.简单地说,外部表,是指不存在于数据库中的表.通过向Oracle提供描述外部表的元数据,我们可以把一个操作系统文件当成一个只读的数据库表,就像这些数 ...

  7. ORACLE中dual用法详解

    基本上oracle引入dual为的就是符合语法1. 我们先从名称来说,dual不是缩写词,本身就是完整的单词.dual名词意思是对数,做形容词时是指二重的,二元的.2. Oracle中的dual表是一 ...

  8. oracle闪回表详解

    --- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间 ...

  9. SQL Server时间粒度系列----第7节日历数据表详解

    本文目录列表: 1.时间粒度有关描述 2.时间维度有关功能函数3.日历数据表 4.日历数据表数据填充 5.总结语 6.参考清单列表   时间粒度有关描述   将该系列涉及到的时间粒度以及分钟以下的粒度 ...

随机推荐

  1. 2、按钮:Buttons

    /* --- page1.html ---*/ <ion-content padding class="page1"> <h1>基本用法,实体框</h ...

  2. mysql应用学习-解决数据乱码

    原因 mysql数据库character_set_database和character_set_server默认编码是latin1,所以导致乱码: 修改步骤 step1. 修改my.ini配置 在[m ...

  3. 序列化及json&pickle的使用

    一.序列化 序列化是指把内存里的数据类型转变成字符串.以使其能存储到硬盘或通过网络传输到远程.——硬盘或网络传输时只能接受bytes. Python中用于序列化的两个模块: json:用于字符串和Py ...

  4. SharePoint 2013 - Upgrade

    1. 升级到SP2013时,需要对data connection文件(UDCX文件)进行修改: 1. Mark all UDCX File (Ctrl + A) and open them. 2. F ...

  5. ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 4、安装 ArcGIS for Server

    安装ArcGIS for Server 解压server安装包,tar -xzvf ArcGIS_Server_Linux_1051_156429.tar.gz 切换到arcgis账户静默安装serv ...

  6. 买卖股票的最佳时机 - C++

    class Solution { public: /** * @param prices: Given an integer array * @return: Maximum profit */ in ...

  7. C++异常安全的思考

    异常安全的代码是指,满足两个条件 1异常中立性 : 是指当你的代码(包括你调用的代码)引发异常时,这个异常 能保持原样传递到外层调用代码 2.异常安全性:  1,抛出异常后,资源不泄露, 2,抛出异常 ...

  8. 一个.java源文件中可以有多个类吗?(内部类除外)有什么条件?

    一个.java源文件中可以有多个类吗?(内部类除外)有什么条件?带着这个疑惑,动手建几个测试类, 揭开心中的疑惑.以下是解开疑惑过程: package test;/** * 一个.java源文件中可以 ...

  9. Java 创建 ARM 虚拟机磁盘类型选择的问题

    问题描述 在Azure 门户创建 ARM 虚拟机时,我们直接可以选择虚拟机的磁盘类型,但是在 Azure Management Libraries for Java 的 API 中我们无法找到直接设置 ...

  10. sqlserver broker远端端点证书认证

    1:采用windows验证的方法: CREATE ENDPOINT InstInitiatorEndpoint STATE = STARTED AS TCP ( LISTENER_PORT = ) F ...