你是否了解Oracle Dual表
Oracle還是比較常用的,于是我研究了一下Oracle Dual表,在這里拿出來和大家分享一下,希望對大家有用。字符函數(shù)分為轉(zhuǎn)換函數(shù)和字符操作函數(shù)
轉(zhuǎn)換函數(shù)有:LOWER,UPPER,INITCAP(首字母大寫)
字符操作函數(shù):CONCAT,SUBSTR,LENGTH,INSTR(某個字符串在此字符串中的位置),IPAD(字符串按某種格式顯示);
例如:
- select initcap(ename) from emp;
- //返回所有所有的人名,并且將名字首字母大寫。
- select concat(ename,job) from emp;
- //返回一列,此列是由ename和job組成的。
- select initcap(substr(ename,1,3)) from emp;
- //返回一列,此列是某列的字串。
- Select length(‘我愛你’) from dual;
- //返回3,字母和漢字都是按兩個字節(jié)來存儲的。
- select lpad(ename,10,'*') from emp;
- //返回名字,如果不足10個,用*補全。
2:在Oracle內(nèi)部存儲都是以大寫存儲的。
例如:
- select * from emp where ename='king';
- //查找不出結(jié)果
- select * from emp where ename=upper('king');
- //能查找出符合條件的結(jié)果。
3:Oracle Dual表
Oracle Dual表比較特殊,是一個系統(tǒng)表,只有一個Dummy Varchar2(1)字段,而且Oracle會盡量保證它只返回一條記錄。在查詢Oracle中的sysdate或sequence.currval等系統(tǒng)值時需要在Select 語句中寫Dual。如:select sysdate from dual.用Dual表來查詢一些沒有具體用戶表的數(shù)據(jù)。
其實在每個表中都有一個隱藏的rowid,rownum(除了dual,其他表都有) 。
dual不僅可以插入還可以刪除(***不要刪除該表,可能會引起數(shù)據(jù)庫無法啟動。如果誤刪也有解決辦法,將參數(shù)replication_dependency_tracking 設(shè)置成 FALSE就可以了)。
dual它應(yīng)該是系統(tǒng)內(nèi)存中的一個虛擬的表,而系統(tǒng)中的dual表只是為了維護數(shù)據(jù)字典和系統(tǒng)對dual的操作權(quán)限。在看看下面的實驗,向Oracle Dual表中隨便插入幾條記錄然后查詢:
- SQL> select * from dual;
- D
- -
- X
- SQL> select rowid ,dummy from dual;
- ROWID D
- ------------------ -
- AAAM1CAABAAAAgiAAA X
- SQL> select rowid ,dummy from dual order by dummy;
- ROWID D
- ------------------ -
- AAAM1CAABAAAAgiAAA X
- AAAM1CAABAAAAgiAAB Y
- AAAM1CAABAAAAgiAAC Y
- AAAM1CAABAAAAgiAAD Z
【編輯推薦】