Oracle中dual表的用途

操作方法

  • 01

    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用户登陆。 在d:pfile.bak文件中最后加入一条: 重新启动数据库: [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.  bitsCN.nET*中国网管博客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;  [bitsCN.Com]DUMMY ---------- Y 为什么会这样呢? 难道SQL的语法对DUAL不起作用吗?带着这个疑问, 我查询了一些ORACLE官方的资料. 原来ORACLE对DUAL表的操作做了一些内部处理,尽量保证DUAL表中只返回一条记录.当然这写内部操作是不可见的 . 看来ORACLE真是蕴藏着无穷的奥妙啊! 附: ORACLE关于DUAL表不同寻常特性的解释 There is internalized code that makes this happen. Code checks that ensure that a table scan of SYS.DUAL only returns one row. Svrmgrl behaviour is incorrect but this is now an obsolete product. The base issue you should always remember and keep is: DUAL table should always have 1 ROW. Dual is a normal table with one dummy column of varchar2(1). This is basically used from several applications as a pseudo table for getting results from a select statement that use functions like sysdate or other prebuilt or application functions. If DUAL has no rows at all some applications (that use DUAL) may fail with NO_DATA_FOUND exception. If DUAL has more than 1 row then applications (that use DUAL) may fail with TOO_MANY_ROWS exception.

(0)

相关推荐

  • Oracle设置默认表空间和更改表空间的状态

    Oracle中维护表空间与数据文件--设置默认表空间和更改表空间的状态 操作方法 01 设置默认表空间: 在Oracle数据库中创建用户(使用CREATE USER语句)时,如果不指定表空间,则默认的 ...

  • Oracle如何创建表空间

    表空间对于一个表来说是非常重要的,如果表空间太小的话,会导致表的数据丢失等问题.下面小编来给大家分享一下Oracle如何创建表空间. 操作方法 01 首先我们来看一下创建表空间的格式,如下图所示,通过 ...

  • Oracle报ORA-00942: 表或视图不存在的解决方法

    Oracle报ORA-00942: 表或视图不存在的解决方法 操作方法 01 1.在数据库中进行查询数据的时候提示表和视图不存在报ORA-00942错误信息 02 2.通过sqldeveloper工具 ...

  • ORACLE中如何修改表里某个字段的数据

    ORACLE中数据的生成可能会出错或者某个字段不满足需要,需要根据需求修改某一字段的内容,那么一个字段数据修改有哪几种方法呢? 方法一: 01 打开PL/SQL,新建sql窗口 02 使用update ...

  • MySQL、SQLServer、Oracle中设置主键自动增长

    最近由于工作关系,接触到了一些其他数据库,再加上自己以前在学校学的Oracle和MySQL数据库,发现区别是有的,今天就拿主键自动增长来说事 操作方法 01 首先先讲MySQL的设置方法,如果把表的主 ...

  • Oracle odi 数据表导出到文件

    最近一些朋友咨询小编关于Oracle odi 数据表导出到文件的问题,其实小编对这个也不是太了解,但是小编查阅了一下网络资源,发i西安了这方面的教程,就拿过来,希望能够帮助到大家! 操作方法 01 建 ...

  • 怎么将Excel中的数据导入到 oracle中

    怎么将Excel 中的数据 通过 PL/SQL 导入到 oracle中:(本文是将 Excel 转换为 txt 的文件,因为这样子 操作简单点) 操作方法 01 在Excle中,将数据整理成类似Ora ...

  • Win2003系统中注册表被禁用不能使用问题解决方法

    注册表在系统中是一个非常重要的存在,哪天你要是发现注册表不能使用了,你肯定非常的着急,因为注册表不能运行,便不能通过注册表编辑器来下达各种命令让系统来执行了。要是遇到这种情况要如何处理呢? 首先,按住 ...

  • Win7中注册表修复exe文件教程

    Win7中注册表修复exe文件教程