dual表结构:
SQL> desc dual;
Name Type Nullable Default Comments
----- ----------- -------- ------- --------
DUMMY VARCHAR2(1) Y
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;
dual 确实是一张表.是一张只有一个字段,一行记录的表. 习惯上,我们称之为'伪表'.因为他不存储主题数据.他的存在,是为了操作上的方便.因为select 都是要有特定对象的.
如:select * from mytable ;等等.
但如果我们不需要从具体的表来取得表中数据,而是单纯地为了得到一些我们想得到的信息,并要通过select 完成时,就要借助一个对象,这个对象,就是dual;
如我们要计算 999*999 的值,可以用:select 999*999 from dual;来实现;
要拼接一个电话信息:select concat('010-','88888888')||'转23' 高乾竞电话 from dual;就变成了我们想要的格式输出.
.当然,我们不一定要dual ,也可以这样做.例如:
create table mydual( dummy varchar2(1));也可以实现和dual 同样的效果:
select 999*999 from mydual;
不过,dual 我们都用习惯了,就无谓自己再搞一套了.
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]
=====
该表插入和删除数据时有很多奥秘。。。。。。