对于Oracle的dual,有以下几点我们需要明确:

第一点
dual不是缩写词而是完整的单词。dual名词意思是对数,做形容词时是指二重的,二元的。

第二点
Oracle中的dual表是一个单行单列的虚拟表。

第三点
Dual表是oracle与数据字典一起自动创建的一个表,这个表只有1列DUMMY,数据类型为VERCHAR2(1),dual表中只有一个数据'X', Oracle有内部逻辑保证dual表中永远只有一条数据。

第四点
Dual表主要用来选择系统变量或求一个表达式的值。

第五点
最常见的一个简单的例子SELECT sysdate FROM daul
Oracle的SELECT语法的限制为 SELECT * | [column1 [AS alias1], column2 [AS alias2]] FROM table
所以没有表名就没有办法查询,而时间日期并不存放在任何表中,于是这个dual虚拟表的概念就被引入了。

DUAL表的用途

dual是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中。

查看当前连接用户
select user from dual;
SYSTEM

查看当前日期、时间
select sysdate from dual;
2007-1-24 1

日期转换
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
2007-01-24 15:02:47

当作计算器用
select 1+2 from dual;
3

创建查看序列值
create sequence aaa increment by 1 start with 1;
select aaa.nextval from dual;
1

select aaa.currval from dual;
1

DUAL就是个一行一列的表,如果你往里执行insert,delete,truncate操作,就会导致很多程序出问题。结果也因sql*plus、pl/sql dev等工具而异。假我们插入想dual插入一条数据,那会是什么结果呢?

insert into dual values('Y');

select * from dual;
DUMMY
-----
X
Y

select sysdate from dual;
SYSDATE
-----------
2004-12-15
2004-12-15

这个时候返回的是两条记录,会引起问题。在通过使用select sysdate into v_sysdate from dual来获取时间或者其他信息的存储过程来说,ORACLE会抛出TOO_MANY_ROWS(ORA-01422)异常。

因此,需要保证在DUAL表内有且仅有一条记录,不能把DUAL表的UPDATE,INSERT,DELETE权限随意释放出去,这样对于系统是很危险的。

如果不小心把dual删除了,是可以恢复的。网上很多资料。

原帖地址:http://yesican.blog.51cto.com/700694/269814

oracle中的dual详解相关推荐

  1. oralce中的dual详解

    oralce中的dual详解 dual是属于sys的 只有一个X varchar2(1)列 查询虚拟列不会产生逻辑IO ======================================== ...

  2. oracle中的用户详解 【转】

    oracle中的用户详解 [转] - feiyun8616 - 博客园 (cnblogs.com)https://www.cnblogs.com/feiyun8616/p/6497690.htmlor ...

  3. oracle中imp命令详解,ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP命令详细对照...

    ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP 命令详细对比 一.EXPDP IMPDP EXP IMP 可以实现 1.可以实现逻辑备份和逻辑恢复 2.可以在数据库用户之间 ...

  4. oracle中调试存储过程,详解Oracle调试存储过程

    详解Oracle调试存储过程 一 调试关键步骤 1.在要调试的存储过程右键,选择编辑以进行调试,截图如下: 2.点击小瓢虫,弹出调试窗口,截图如下: 3.输入7839员工编号,点击确认,进行调试,截图 ...

  5. oracle中to_date函数详解

    to_date()与24小时制表示法及mm分钟的显示: 一.在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用"yyyy-MM-dd HH:mm:ss& ...

  6. Oracle中动态SQL详解

    1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一 ...

  7. [转载]Oracle中动态SQL详解

    1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一 ...

  8. oracle中的index函数,Oracle中的索引详解(整理)

    一. ROWID的概念 存储了row在数据文件中的具体位置:64位 编码的数据,A-Z, a-z, 0-9, +, 和 /, row在数据块中的存储方式 SELECT ROWID, last_name ...

  9. oracle中常见索引,Oracle中的索引详解(整理)

    一. ROWID的概念 存储了row在数据文件中的具体位置:64位 编码的数据,A-Z, a-z, 0-9, +, 和 /, row在数据块中的存储方式 SELECT ROWID, last_name ...

最新文章

  1. Python自然语言处理中文版-学习笔记
  2. SAP Spartacus里的product carousel控件
  3. 怎样添加、移除、移动、复制、创建和查找节点?
  4. java导入导出excel_Java导入导出Excel工具 easyexcel
  5. 【Spring】HttpMessageNotWritableException No converter found for return value of type
  6. bzoj3255 一个关于序列的游戏
  7. 打印纸张尺寸换算_纸张开本和尺寸对照表!
  8. python安装pygame的命令是什么_Python的pygame安装教程详解
  9. 【muduo】TcpClient与TcpServer建立连接过程对比
  10. 对于课程签到设置合理性的调查报告
  11. 白化滤波器matlab程序,04实验四:白化滤波器的设计实验报告
  12. java单继承多实现_单继承,多实现
  13. BOM成本计算成最下级算到最上级
  14. 用python将九九乘法口诀表打印在Excel中
  15. Day10.事件下(学习日记10)
  16. python3GUI--翻译器-v2.0(附源码)
  17. 项目经理如何才能做好沟通?
  18. RSD 教程 —— §2.3  窗口布局
  19. 高效的HPPC java库
  20. 读007 学风险管理RSK

热门文章

  1. 经验法则:回波损耗多少才算多?//学习记录
  2. java 等待线程池结束_等待线程池中任务执行完毕做优雅关闭
  3. ASCII,ISO8859-1,GBK,GB18030,Unicode,UTF-8详解
  4. 女人一生中重要的三件事。
  5. pythonecharts地图画散点_用Python把图做的好看点:用Pyecharts做个交互地图(一)...
  6. 计算机毕业设计java+SSM学生兼职工作网站(源码+系统+mysql数据库+Lw文档)
  7. 中小型企业网络解决方案的设计和实施
  8. Android动画特效之Animator属性动画实现
  9. Python基础之算数运算符
  10. JAVA实现简单“伪植物大战僵尸“游戏