Oracle還是比較常用的,於是我研究了一下Oracle Dual表,在這裡拿出來和大家分享一下,希望對大家有用。字符函數分為轉換函數和字符操作函數
轉換函數有:LOWER,UPPER,INITCAP(首字母大寫)
字符操作函數: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,字母和漢字都是按兩個字節來存儲的。
- select lpad(ename,10,'*') from emp;
- //返回名字,如果不足10個,用*補全。
2:在Oracle內部存儲都是以大寫存儲的。
例如:
- select * from emp where ename='king';
- //查找不出結果
- select * from emp where ename=upper('king');
- //能查找出符合條件的結果。
3:Oracle Dual表
Oracle Dual表比較特殊,是一個系統表,只有一個Dummy Varchar2(1)字段,而且Oracle會盡量保證它只返回一條記錄。在查詢Oracle中的sysdate或sequence.currval等系統值時需要在Select 語句中寫Dual。如:select sysdate from dual.用Dual表來查詢一些沒有具體用戶表的數據。
其實在每個表中都有一個隱藏的rowid,rownum(除了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
- ------------------ -
- AAAM1CAABAAAAgiAAA X
- SQL> select rowid ,dummy from dual order by dummy;
- ROWID D
- ------------------ -
- AAAM1CAABAAAAgiAAA X
- AAAM1CAABAAAAgiAAB Y
- AAAM1CAABAAAAgiAAC Y
- AAAM1CAABAAAAgiAAD Z