相信大部分用慣了SQL Server的人,剛開始用Oracle肯定會特不習慣,因為通常情況下,Oracle建的表名和字段名都會自動給我們轉換為大寫的。如下圖所示:< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />
說實話,筆者當初第一次接觸Oracle的時候,也看着很不爽,可那會也只能無奈,因為沒法解決。所以心理一直在想,如果能顯示成區分大小寫的該多好啊,於是我實現了心中的願意,如下圖所示:
期盼已久的效果終於實現了,特別高興,所以我要告訴大家實現原理,以期待更多像我一樣追求美觀的人得到 一種心理安慰。
實現方式:
不再用PL-SQL直接建表了,而改用PD(Power Desginer)的方式建表。因為我發現不管我們是否大小寫區分PL-SQL都會自動幫我們轉換稱大寫的了。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自動生成的創建表的腳本中,表名和字段名都加了雙引號。雙引號在Oracle中表示區分大小寫,Oracle是嚴格區分大小寫的,未使用雙引號時默認全部大寫。可能很多人都會誤認為oracle是不區分大小寫的,原因是我們在寫查詢語句的時候,大小寫無所謂,結果都是一樣的,這只是個表面現象,只要你不使用雙引號表示區分大小寫,oracle會默認把你寫的腳本全部轉換為大寫的。從下面可以看出:
因為Oracle默認存儲為大寫形式,所以PL-SQL顯示的效果也是大寫的。
正是因為區分大小寫,所以在Oracle中可以存在大小寫並存的同名表或表字段。
到這里大家我想大家應該明白了,怎么使Oracle區分大小寫了,就是使用雙引號。
思考:既然Oracle可以區分大小寫,那為什么大家在使用的時候都寧願選擇看着不舒服的大寫形式呢?下面這個實驗我們將給出答案,如下圖所示:
正如上面所講,如果我們不加雙引號,那么Oracle會默認把表名和字段名全部轉換為大寫形式。
最簡單的查詢語句:select * from TCamera
會報錯,提示:ORA-00942:table or view does not exist 表或試圖不存在
在這個時候,我們看提示應該很容易明白了,原因是在Oracle中的user-tables 不存在我們要查詢的TCAMERA[自動轉換稱大寫的]表。
那么正確的語句應該是:select * from "TCamera" 需要加雙引號
這個時候就感覺很不舒服了,那寫查詢多不方便呀,而且不僅是表名需要使用雙引號,如果查詢某些特定字段也需要加雙引號,那么此時給開發人員將帶來諸多的不便。這也就是為什么大家都寧願選擇全部大寫的了。明白了嗎?
Power Designer的對應設置:
使用PD的人就會有問題了,既然默認PD生成的都是帶雙引號區分大小寫的,那怎么把雙引號去掉呢,總不能一個一個改吧?呵呵,既然你想到了,那么Sybase的團隊自然也是想到了,所以通過下面的設置步驟,就能去掉PD自動生成腳本的雙引號了。
找到菜單Database—>Edit Current DBMS 會打開DBMS屬性設置窗口,找到ScriptàSqlàCaseSensitivityUsingQuote,選擇No,即大小寫不區分。如下圖所示:
點擊確定后,系統會提示是否保存設置,請點擊"是"。
這個時候我們來對比看一下生成的SQL:
設置前,PD默認區分大小寫,表名和字段都帶雙引號,如下圖所示:
設置后,不區分大小寫,所有的都不帶雙引號,所以生成的表及其字段都將默認被Oracle轉換為大寫的形式。如下圖所示:
到這里,PD和Oracle就對應起來了,喜歡什么形式的就自己動手去設置吧。
最后我們對比一下SQL Server 和Oracle在查詢具體內容上的區別,讓大家更深刻地認識到我們平時可能存在的誤解。
這表明,SQL Server在表字段內容中,其實也是不區分大小寫的。但是Oracle就不同,同樣的狀況,Oracle肯定查詢不到數據,因為Oracle嚴格區分大小寫。不信自己可以去試試。
轉自: 飛天心宏 2011-12-21