oracle 数据库中dual虚拟表的介绍

本文介绍了 Oracle 中 Dual 表的用途,包括查询当前用户、使用系统函数、获取序列值等,并探讨了 Dual 表的结构及特殊行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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   add_months(sysdate,+2)   from   dual;--当前月份加2 
  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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值