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