一Dual 是 Oracle中的一個實際存在的表任何用戶均可讀取常用在沒有目標表的Select語句塊中如
查看系統當前時間 select sysdate from dual;
當計算器使用 select + from dual;
查看系統當前用戶 select user from dual;
將系統當前時間轉換為一定的格式select to_char(sysdateyyyymmdd hh:mi:ss) from dual;
查看序列下一個值select aaanextval from dual;
二DUAL是屬於SYS schema的一個表然後以PUBLIC SYNONYM的方式供其他數據庫USER使用只有一個字段DUMMY為VARCHAR()型
DUAL表是建立在SYSTEM表空間的第一是因為DUAL表是SYS這個用戶建的本來默認的表空間就是SYSTEM第二把這個可能經常被查詢的表和用戶表分開來存放對於系統性能的是有好處的
華麗的分割線
字符函數分為轉換函數和字符操作函數
轉換函數有LOWERUPPERINITCAP(首字母大寫)
字符操作函數CONCATSUBSTRLENGTHINSTR(某個字符串在此字符串中的位置)IPAD(字符串按某種格式顯示);
例如
select initcap(ename) from emp; //返回所有所有的人名並且將名字首字母大寫 select concat(enamejob) from emp; //返回一列此列是由ename和job組成的 select initcap(substr(ename)) from emp; //返回一列此列是某列的字串 Select length(我愛你) from dual; //返回字母和漢字都是按兩個字節來存儲的 select lpad(ename*) from emp; //返回名字如果不足個用*補全
在Oracle內部存儲都是以大寫存儲的
例如
select * from emp where ename=king; //查找不出結果 select * from emp where ename=upper(king); //能查找出符合條件的結果
Oracle Dual表
Oracle Dual表比較特殊是一個系統表只有一個Dummy Varchar()字段而且Oracle會盡量保證它只返回一條記錄在查詢Oracle中的sysdate或sequencecurrval等系統值時需要在Select 語句中寫Dual如select sysdate from dual用Dual表來查詢一些沒有具體用戶表的數據
其實在每個表中都有一個隱藏的rowidrownum(除了dual其他表都有)
dual不僅可以插入還可以刪除(最好不要刪除該表可能會引起數據庫無法啟動如果誤刪也有解決辦法將參數replication_dependency_tracking 設置成 FALSE就可以了)
dual它應該是系統內存中的一個虛擬的表而系統中的dual表只是為了維護數據字典和系統對dual的操作權限在看看下面的實驗向Oracle Dual表中隨便插入幾條記錄然後查詢
SQL> select * from dual; D X SQL> select rowid dummy from dual; ROWID D AAAMCAABAAAAgiAAA X SQL> select rowid dummy from dual order by dummy; ROWID D AAAMCAABAAAAgiAAA X AAAMCAABAAAAgiAAB Y AAAMCAABAAAAgiAAC Y AAAMCAABAAAAgiAAD Z
From:http://tw.wingwit.com/Article/program/Oracle/201311/18906.html