探索oracle dual表

pingley發表於2012-02-13
探索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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章