`
net_liu
  • 浏览: 232655 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle中dual表的用途介绍

阅读更多
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表的使用

    DUAL 表的用途非常广泛,常用在没有目标表的 Select 语句块中。下面都是 DUAL 表的一些常见使用场景: 查看当前连接用户 使用 DUAL 表可以查看当前连接用户,语句如下: ```sql SELECT USER FROM DUAL; ``` 查看...

    oracle之dual表的一些

    `DUAL`表是Oracle数据库中的一个预定义只读表,主要用途是执行单行计算或返回固定值。这个表非常简单,仅包含一行数据和一个名为`DUMMY`的列,其值为`X`。因此,在进行各种测试或者查询操作时,我们通常会利用`DUAL`...

    10.Oracle虚表1

    Oracle数据库中的`dual`表是一个特殊的虚拟表,它的存在主要为了解决SQL语句的构造问题,尤其是当需要一个简单的上下文来执行表达式或函数时。由于`dual`表只包含一行且只有一个字段,因此它常被用于测试和演示目的...

    Oracle dual详解

    `DUAL`表是Oracle数据库中的一个特殊表,它的主要用途在于支持简单的查询与计算任务。通过本文的介绍,我们可以了解到`DUAL`表的基本用法、内部结构以及设计原理等内容。对于Oracle数据库的初学者来说,掌握`DUAL`表...

    数据库表dual

    Dual表是Oracle数据库中一个特殊的表,它是Oracle数据库中自带的表,由 SYS 模式所有,所有用户都可以访问它。Dual表只有一个列:DUMMY,其数据类型为VARCHAR2(1),表中只有一行数据:'X'。 Dual表的主要用途是: ...

    oracle查用户所有表

    在Oracle数据库管理系统中,查询用户所有表的相关信息是一项常见的操作,这对于数据库管理和开发工作至关重要。本文将详细解释如何使用SQL语句来实现这一目标,并提供一些相关的查询技巧。 首先,我们来看两个主要...

    oracle中sequence介绍及应用

    ### Oracle中的Sequence介绍及应用 #### 一、Sequence概述 在Oracle数据库中,Sequence是一种用于自动产生数值序列的对象。它可以生成连续的整数或者非连续的整数序列,并且可以根据需求进行递增或递减。Sequence...

    oracle常用问题解答

    **问题**: Oracle中的SYS_CONTEXT函数有何用途? **解答**: `SYS_CONTEXT`函数允许访问Oracle环境中的上下文信息,例如会话变量、服务器参数等。它常用于获取当前会话的信息。 - **示例**: 获取当前用户的名称: ``...

    Oracle面试题收集

    尽管看起来DUAL表被插入了一行,然后又删除了,但在Oracle中DUAL表始终只有一行。所以,无论执行多少次插入和删除,`SELECT COUNT(*) FROM DUAL` 总是返回1。 4. 数据抽象方法包括分类、聚集、概括。在E-R模型中,...

    ORACLE CRC32函数

    ### ORACLE CRC32函数详解 ...通过以上介绍,我们可以了解到Oracle数据库中`CRC32`函数的强大之处及其在实际应用中的广泛用途。它不仅能够帮助我们有效地进行数据校验和去重,还能在一定程度上提高系统的整体性能。

    oracle伪列以及伪表.docx

    Oracle数据库系统中,伪列和伪表是两个特殊的概念,它们为数据库操作提供了额外的功能和便利。本文将详细探讨这两个概念及其应用场景。 首先,我们来理解什么是伪列。伪列并非用户在创建表时定义的列,而是Oracle...

    Oracle高级sql学习与练习

    22. NULL和DUAL详解讨论了Oracle中的空值概念,以及特殊的虚拟表DUAL的用途。 23. 时间、数字、字符格式详解,涉及格式化和解析不同数据类型时使用的各种格式。 24. Oracle字符集问题讨论了字符编码和字符集对...

    oracle伪列以与伪表.doc

    Oracle数据库系统中,伪列和伪表是其特有的概念,用于增强数据库的功能和操作灵活性。伪列不是用户在创建表时定义的列,而是Oracle系统自动生成的特殊列,它们提供了额外的信息或功能。以下是关于Oracle伪列和伪表的...

    oracle安装文件.docx

    - DUAL表是一个特殊的虚拟表,在Oracle中经常被用作测试和演示用途。 - 可以通过查询DUAL表来进行简单的计算或测试SQL语法结构,例如`SELECT 1+1 FROM DUAL;`。 4. **SQL查询**: - 基础的SELECT语句,如`SELECT...

    PostgreSQL和Oracle区别

    **Oracle**中有一个特殊的“DUAL”表,常用于测试或执行简单的SQL查询。而在**PostgreSQL**中,可以通过创建一个视图(`VIEW`)来模拟这个行为,确保跨数据库的程序兼容性。 ### 5. 关联查询差异 - **Oracle**支持...

    Oracle课程小结[定义].pdf

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在...理解DUAL表的用途、NULL值的特性以及各种函数的使用方式,将有助于我们在软件开发过程中更好地设计和优化数据库操作,从而提高应用程序的性能和稳定性。

    Oracle数据库DBA面试题50道及答案.pdf

    Oracle数据库DBA(Database Administrator)是负责Oracle数据库系统运行管理的专业技术人员。在准备面试Oracle数据库管理员岗位时,掌握相关的技术知识和处理问题的能力是非常重要的。以下是针对给定的Oracle数据库...

    Oracle sql查询当前月的所有日期

    - **`FROM DUAL`**:这是一个特殊的表,通常用于简单的测试或演示用途,它只包含一行记录。 - **`CONNECT BY ROWNUM (TO_CHAR(LAST_DAY(SYSDATE), 'dd'))`**:这部分代码用于限制生成的行数,即当前月份的总天数。`...

Global site tag (gtag.js) - Google Analytics