相信大部分用慣了SQL Server的人,剛開始用Oracle肯定會特不習慣,因為通常情況下,Oracle建的表名和字段名都會自動給我們轉(zhuǎn)換為大寫的。如下圖所示 說實話,筆者當初第一次接觸Oracle的時候,也看著很不爽,可那會也只能無奈,因為沒法解決。所以心理一直在想,如果能顯示成區(qū)分大小寫的該多好啊,于是我實現(xiàn)了心中的愿意,如下圖所示:
期盼已久的效果終于實現(xiàn)了,特別高興,所以我要告訴大家實現(xiàn)原理,以期待更多像我一樣追求美觀的人得到 一種心理安慰。 實現(xiàn)方式: 不再用PL-SQL直接建表了,而改用PD(Power Desginer)的方式建表。因為我發(fā)現(xiàn)不管我們是否大小寫區(qū)分PL-SQL都會自動幫我們轉(zhuǎn)換稱大寫的了。PD自動生成的SQL如下: create table "TDepartment" ( FID NVARCHAR2(36) not null, "FText" NVARCHAR2(50) not null, "FParentID" NVARCHAR2(36) not null, "FLevel" NUMBER, "FAutoCode" NVARCHAR2(100), "FCode" NVARCHAR2(50), "FLeaf" NUMBER default 1 not null, "FRemark" NVARCHAR2(500), "FDataServerIP" NVARCHAR2(100), "FDataServerPort" NVARCHAR2(10), "FMediaServerIP" NVARCHAR2(100), "FMediaServerPort" NVARCHAR2(10), "FDataServer" NVARCHAR2(200), "FMediaServer" NVARCHAR2(200), constraint PK_TDEPARTMENT primary key (FID) ); (字段說明的腳本在這就省略了) 原理分析: PL自動生成的創(chuàng)建表的腳本中,表名和字段名都加了雙引號。雙引號在Oracle中表示區(qū)分大小寫,Oracle是嚴格區(qū)分大小寫的,未使用雙引號時默認全部大寫。可能很多人都會誤認為oracle是不區(qū)分大小寫的,原因是我們在寫查詢語句的時候,大小寫無所謂,結(jié)果都是一樣的,這只是個表面現(xiàn)象,只要你不使用雙引號表示區(qū)分大小寫,oracle會默認把你寫的腳本全部轉(zhuǎn)換為大寫的。從下面可以看出: 因為Oracle默認存儲為大寫形式,所以PL-SQL顯示的效果也是大寫的。
正是因為區(qū)分大小寫,所以在Oracle中可以存在大小寫并存的同名表或表字段。 到這里大家我想大家應該明白了,怎么使Oracle區(qū)分大小寫了,就是使用雙引號。 思考:既然Oracle可以區(qū)分大小寫,那為什么大家在使用的時候都寧愿選擇看著不舒服的大寫形式呢?下面這個實驗我們將給出答案,如下圖所示:
正如上面所講,如果我們不加雙引號,那么Oracle會默認把表名和字段名全部轉(zhuǎn)換為大寫形式。 最簡單的查詢語句:select * from TCamera 會報錯,提示:ORA-00942:table or view does not exist 表或試圖不存在 在這個時候,我們看提示應該很容易明白了,原因是在Oracle中的user-tables 不存在我們要查詢的TCAMERA[自動轉(zhuǎn)換稱大寫的表。 那么正確的語句應該是:select * from “TCamera” 需要加雙引號 這個時候就感覺很不舒服了,那寫查詢多不方便呀,而且不僅是表名需要使用雙引號,如果查詢某些特定字段也需要加雙引號,那么此時給開發(fā)人員將帶來諸多的不便。這也就是為什么大家都寧愿選擇全部大寫的了。明白了嗎?
Power Designer的對應設置: 使用PD的人就會有問題了,既然默認PD生成的都是帶雙引號區(qū)分大小寫的,那怎么把雙引號去掉呢,總不能一個一個改吧?呵呵,既然你想到了,那么Sybase的團隊自然也是想到了,所以通過下面的設置步驟,就能去掉PD自動生成腳本的雙引號了。 找到菜單Database—>Edit Current DBMS 會打開DBMS屬性設置窗口,找到ScriptàSqlàCaseSensitivityUsingQuote,選擇No,即大小寫不區(qū)分。如下圖所示:
點擊確定后,系統(tǒng)會提示是否保存設置,請點擊“是”。 這個時候我們來對比看一下生成的SQL: 設置前,PD默認區(qū)分大小寫,表名和字段都帶雙引號,如下圖所示: 設置后,不區(qū)分大小寫,所有的都不帶雙引號,所以生成的表及其字段都將默認被Oracle轉(zhuǎn)換為大寫的形式。如下圖所示: 最后我們對比一下SQL Server 和Oracle在查詢具體內(nèi)容上的區(qū)別,讓大家更深刻地認識到我們平時可能存在的誤解。
這表明,SQL Server在表字段內(nèi)容中,其實也是不區(qū)分大小寫的。但是Oracle就不同,同樣的狀況,Oracle肯定查詢不到數(shù)據(jù),因為Oracle嚴格區(qū)分大小寫。不信自己可以去試試。
|
|