說(shuō)實(shí)話(huà),筆者當(dāng)初第一次接觸Oracle的時(shí)候,也看著很不爽,可那會(huì)也只能無(wú)奈,因?yàn)闆](méi)法解決。所以心理一直在想,如果能顯示成區(qū)分大小寫(xiě)的該多好啊,于是我實(shí)現(xiàn)了心中的愿意,如下圖所示:
期盼已久的效果終于實(shí)現(xiàn)了,特別高興,所以我要告訴大家實(shí)現(xiàn)原理,以期待更多像我一樣追求美觀的人得到 一種心理安慰。
實(shí)現(xiàn)方式: 不再用PL-SQL直接建表了,而改用PD(Power Desginer)的方式建表。因?yàn)槲野l(fā)現(xiàn)不管我們是否大小寫(xiě)區(qū)分PL-SQL都會(huì)自動(dòng)幫我們轉(zhuǎn)換稱(chēng)大寫(xiě)的了。PD自動(dòng)生成的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)
);
(字段說(shuō)明的腳本在這就省略了)
原理分析: PL自動(dòng)生成的創(chuàng)建表的腳本中,表名和字段名都加了雙引號(hào)。
雙引號(hào)在Oracle中表示區(qū)分大小寫(xiě),Oracle是嚴(yán)格區(qū)分大小寫(xiě)的,未使用雙引號(hào)時(shí)默認(rèn)全部大寫(xiě)。可能很多人都會(huì)誤認(rèn)為
oracle是不區(qū)分大小寫(xiě)的,原因是我們?cè)趯?xiě)查詢(xún)語(yǔ)句的時(shí)候,大小寫(xiě)無(wú)所謂,結(jié)果都是一樣的,這只是個(gè)表面現(xiàn)象,只要你不使用雙引號(hào)表示區(qū)分大小寫(xiě),
oracle會(huì)默認(rèn)把你寫(xiě)的腳本全部轉(zhuǎn)換為大寫(xiě)的。從下面可以看出:
因?yàn)?font face="Calibri">Oracle默認(rèn)存儲(chǔ)為大寫(xiě)形式,所以PL-SQL顯示的效果也是大寫(xiě)的。
正是因?yàn)閰^(qū)分大小寫(xiě),所以在Oracle中可以存在大小寫(xiě)并存的同名表或表字段。
到這里大家我想大家應(yīng)該明白了,怎么使Oracle區(qū)分大小寫(xiě)了,就是使用雙引號(hào)。
思考:既然Oracle可以區(qū)分大小寫(xiě),那為什么大家在使用的時(shí)候都寧愿選擇看著不舒服的大寫(xiě)形式呢?下面這個(gè)實(shí)驗(yàn)我們將給出答案,如下圖所示:
正如上面所講,如果我們不加雙引號(hào),那么Oracle會(huì)默認(rèn)把表名和字段名全部轉(zhuǎn)換為大寫(xiě)形式。
最簡(jiǎn)單的查詢(xún)語(yǔ)句:select * from TCamera
會(huì)報(bào)錯(cuò),提示:ORA-00942:table or view does not exist 表或試圖不存在
在這個(gè)時(shí)候,我們看提示應(yīng)該很容易明白了,原因是在Oracle中的user-tables 不存在我們要查詢(xún)的TCAMERA[自動(dòng)轉(zhuǎn)換稱(chēng)大寫(xiě)的表。
那么正確的語(yǔ)句應(yīng)該是:select * from “TCamera” 需要加雙引號(hào)
這個(gè)時(shí)候就感覺(jué)很不舒服了,那寫(xiě)查詢(xún)多不方便呀,而且不僅是表名需要使用雙引號(hào),如果查詢(xún)某些特定字段也需要加雙引號(hào),那么此時(shí)給開(kāi)發(fā)人員將帶來(lái)諸多的不便。這也就是為什么大家都寧愿選擇全部大寫(xiě)的了。明白了嗎?
Power Designer的對(duì)應(yīng)設(shè)置: 使用
PD的人就會(huì)有問(wèn)題了,既然默認(rèn)
PD生成的都是帶雙引號(hào)區(qū)分大小寫(xiě)的,那怎么把雙引號(hào)去掉呢,總不能一個(gè)一個(gè)改吧?呵呵,既然你想到了,那么
Sybase的團(tuán)隊(duì)自然也是想到了,所以通過(guò)下面的設(shè)置步驟,就能去掉
PD自動(dòng)生成腳本的雙引號(hào)了。
找到菜單Database—>Edit Current DBMS 會(huì)打開(kāi)DBMS屬性設(shè)置窗口,找到ScriptàSqlàCaseSensitivityUsingQuote,選擇No,即大小寫(xiě)不區(qū)分。如下圖所示:
7.jpg (76.66 KB, 下載次數(shù): 2)
下載附件
2012-8-9 08:42 上傳
點(diǎn)擊確定后,系統(tǒng)會(huì)提示是否保存設(shè)置,請(qǐng)點(diǎn)擊“是”。
這個(gè)時(shí)候我們來(lái)對(duì)比看一下生成的SQL:
設(shè)置前,PD默認(rèn)區(qū)分大小寫(xiě),表名和字段都帶雙引號(hào),如下圖所示:
設(shè)置后,不區(qū)分大小寫(xiě),所有的都不帶雙引號(hào),所以生成的表及其字段都將默認(rèn)被Oracle轉(zhuǎn)換為大寫(xiě)的形式。如下圖所示:
到這里,
PD和
Oracle就對(duì)應(yīng)起來(lái)了,喜歡什么形式的就自己動(dòng)手去設(shè)置吧。
最后我們對(duì)比一下SQL Server 和Oracle在查詢(xún)具體內(nèi)容上的區(qū)別,讓大家更深刻地認(rèn)識(shí)到我們平時(shí)可能存在的誤解。
這表明,SQL Server在表字段內(nèi)容中,其實(shí)也是不區(qū)分大小寫(xiě)的。但是Oracle就不同,同樣的狀況,Oracle肯定查詢(xún)不到數(shù)據(jù),因?yàn)?font face="Calibri">Oracle嚴(yán)格區(qū)分大小寫(xiě)。不信自己可以去試試。