複製鏈接
請複製以下鏈接發送給好友

dual

(Oracle中的一張內部表)

鎖定
Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用。 [1] 
中文名
dual
性    質
Oracle中的一張表
特    點
Oracle提供的最小的工作表
功    能
某些特殊功用

目錄

dual表結構

Name
Type
DUMMY
Varchar2(1)

dual特性

  1. Oracle提供的最小的,不論進行何種操作(不要刪除記錄),它都只有一條記錄——'X'。例如:執行select * from dual,裏面只有一條記錄;執行insert into dual values('Y')後,再次查詢dual表,仍然顯示一條記錄。
  2. 是sys用户下的一張內部表,所有用户都可以使用DUAL名稱訪問,無論什麼時候這個表總是存在。例如:執行一個查看當前日期的語句 select sysdate from dual,這條語句在放在放在任何一個oracle數據庫當中都不會報錯,所以一般做一些特定查詢的時候用這個表是最穩妥的。

dual用途

  1. select計算常量表達式、偽列等值oracle內部處理使它只返回一行數據,而使用其它表時可能返回多個數據行。
  2. 查看當前用户select user from dual;select count(*) from dual;
  3. 用做計算器select 7*9*10-10 from dual;
    1. 獲得當前系統時間select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
    2. 獲得主機名select sys_context('userenv','terminal') from dual;
    3. 獲得當前localeselect sys_context('userenv','language') from dual;
    4. 獲得一個隨機數select DBMS_RANDOM.random from dual;
  4. 查看序列值
    1. 創建序列aaa 以1開始,每次加1create sequence aaa increment by 1 start with 1;
    2. 獲得序列aaa 的下一個序列值select aaa.nextval from dual;
    3. 獲得序列aaa 的當前序列值select aaa.currval from dual;

dual原理

dual到底是什麼object?它有什麼特殊的行為嗎?
select owner, object_name , object_type from dba_objects where object_name like '%DUAL%';
原來dual是屬於sys schema的一個表,然後以PUBLIC SYNONYM的方式供其他用户使用。
可以利用dual表和日期函數設置日期格式及運算,從而理解它們如何起作用。
參考資料
  • 1.    Kevin Loney.Oracle Database 11g:The Complete Reference:Oracle Press,2010:167--168