dual表相关
dual表相关
dual 确实是一张表.是一张只有一个字段,一行记录的表.
习惯上,我们称之为'伪表'.因为他不存储主题数据.
他的存在,是为了操作上的方便.因为select 都是要有特定对象的.
若不需要从具体的表来取得表中数据,而是单纯地为了得到一些我们想得到的信息,并要通过select 完成时,就要借助一个对象,这个对象,就是dual;
比如:
SQL> desc dual;
Name Null? Type
----------------------------------------- -------- ----------------------------
DUMMY VARCHAR2(1)
SQL> select * from dual;
D
-
X
SQL> select user from dual;
USER
------------------------------
SYSTEM
SQL> select 12*12 from dual;
12*12
----------
144
该表只有一行一列,其实该表和系统中的其他表一样,一样可以执行插入、更新、删除操作,还可以执行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功能:
create table mydual( dummy varchar2(1));
也可以实现和dual 同样的效果:
select 12*12 from mydual;