ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 探索oracle dual表

探索oracle dual表

原创 Linux操作系统 作者:pingley 时间:2012-02-13 00:39:55 0 删除 编辑
探索oracle dual表
dual表与数据字典是由oracle数据库一起自动创建的。dual存在于sys模式中,但是所有的用户都可以
使用该表。
dual表的结构:
SQL> desc dual
Name  Type        Nullable Default Comments 
----- ----------- -------- ------- -------- 
DUMMY VARCHAR2(1) Y        
dual表中只有一列dummy,类型是varchar2。只能包含一条记录,值是X。
SQL> select * from dual;
DUMMY
-----
X
下面是dual介绍dual表的用途
用作查询当前登录用户名:
SQL> select user from dual;
USER
------------------------------
HR
用作系统日期查询:
SQL> select sysdate from dual;
SYSDATE
-----------
2012/2/13 0
用作表达式求值:
SQL> select 4*5+10 from dual;
    4*5+10
----------
        30
用作SQL函数的测试:
SQL> select length('oracle database') from dual; 
LENGTH('ORACLEDATABASE')
------------------------
                      15
dual表主要用来返回一个信息。常用于确定表达式的值,或者函数执行的效果。
dual表一次只能返回一条记录。
dual表可以一次返回多个值:
SQL> select 4*5+10,3*6 from dual;
 
    4*5+10        3*6
---------- ----------
        30         18
SQL> select concat('oracle','database11g'),length('oracledatase11g')
  2  from dual;
CONCAT('ORACLE','DATABASE11G') LENGTH('ORACLEDATASE11G')
------------------------------ -------------------------
oracledatabase11g                                     15
dual表用于求解表达式的值是可以使用变量:
SQL> select &var+4 from dual;
输入 var 的值:  4
原值    1: select &var+4 from dual
新值    1: select 4+4 from dual

       4+4
----------
         8
sysy与system 用户采用权对dual表进行insert,但是dual会记录这些插入的值但是查询的时候只有显示X:
SQL> conn sys as sysdba
输入口令:
已连接。
SQL> select * from dual;
DU
--
X
SQL> insert into dual values('I');
已创建 1 行。
SQL> insert into dual values('I');
已创建 1 行。
SQL> select * from dual;
DU
--
X
dual表中的值还是X。
下面是一个有意思的例子:
SQL> delete  from dual;
已删除 1 行。
SQL> select * from dual;
DU
--
I
SQL> select 4*5 from dual;
       4*5
----------
        20
dual表中的记录是可以被删除的,但是会自动的变成一个新插入的值。这里是I。
并且不会影响dual表的功能.
SQL> delete  from dual;
已删除 1 行。
SQL> delete  from dual;
已删除 1 行。
SQL> delete  from dual;
已删除 1 行。
SQL> select * from dual;
DU
--
I
SQL> delete  from dual;
已删除 1 行。
.
.
.
SQL> select * from dual;
未选定行
SQL> select upper('oracle') from dual;
UPPER('ORACL
------------
ORACLE
刚才我们插入了多个I,现在全部删除掉.直到没有记录。但是照样不会影响dual表的功能。
从上面的实验可以看出dual中的记录类似一个队列,X在最上面,其他插入的值存放在
后面,并且oracle控制一次只显示一个值,当把X值删除以后,后面的记录就顶上来了。这里
是I。
dual表在计算表达式的值时,函数测试时,应该也是把这些结果存放在dual表中的,并且
把这些值置于X值之前,oracle控制显示当前的查询(或者计算值)。等这些查询,求值,测试
一结束。又删除掉这些值。所有我们又只看到X。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26110315/viewspace-716100/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    169
  • 访问量
    740828