在資料庫建立一個測試表資料庫版本為ORACLE 10.2.0.1.0),表名為小寫test。 指令碼如下所示:
- CREATE TABLE test
- (
- id NUMBER(10),
- Name VARCHAR2(20),
- Sex VARCHAR(2)
- )
- --尋找不到對應資料
- SELECT * FROM USER_TABLES WHERE TABLE_NAME = 'test'
- --改用大寫才可以查到對應的資料
- SELECT * FROM USER_TABLES WHERE TABLE_NAME ='TEST'
- --尋找不到對應資料
- SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'test';
- SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME ='TEST';
下面我們用雙引號來建立另外一個表(ORACLE 中 " "的作用是強制區分大小寫,以及關鍵字做欄位時用"")指令碼如下所示:
- CREATE TABLE "test1"
- (
- "id" NUMBER(10),
- "Name" VARCHAR2(20),
- "SEX" VARCHAR(2)
- )
- SELECT * FROM USER_TABLES WHERE TABLE_NAME = 'test1';
- SELECT * FROM DBA_TABLES WHERE TABLE_NAME = 'test1';
- SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME ='test1';
- SELECT * FROM "test1";
- --ORA-00942: 表或試圖不存在
- SELECT * FROM test1;
- --ORA-00904: "NAME": 標識符無效
- SELECT id, Name, SEX FROM "test1";
- --ORA-00904: "ID": 標識符無效
- SELECT id, "Name", SEX FROM "test1";
- SELECT "id", "Name", SEX FROM "test1";
- --ORA-00942: 表或試圖不存在
- SELECT "id", "Name", SEX FROM test1;
上面的例子也許會讓覺得比較奇怪,這種現象在SQL SERVER裡面是不存在的。這是因為ORACLE在建表或者欄位時,如果沒有雙引號,ORACLE會把表名、欄位名全部轉化為大寫字母然後寫入資料字典。訪問資料字典時,沒有雙引號ORACLE會將其轉化成大寫然後再去資料欄位中尋找。如果加上雙引號則能區分大小寫。不僅僅關鍵字不區分大小寫,函數名,過程名,表名稱,pl/sql塊中變數名,使用者名稱,密碼等都不區分大小寫。
有些人可能不習慣表名、欄位全部用大寫,而喜歡用小寫或大小寫混雜的形式,如果是這樣的話,你在ORACLE中寫指令碼時就要注意了,沒有處理好,這樣會給你帶來“無窮的麻煩”
如上所示,你必須在欄位上加上"",否則這裡報錯,哪裡起火。而人有時候又是很粗心、健忘的。所以在ORACLE中,還是建議全部用大寫,這樣可能開始會讓你有些不爽,不過習慣了就好了。總比你用""給後面的開發帶來很多隱患要好得多。
在ORAClE中,習慣指令碼、欄位等用大寫,有人說能提高效率,這樣少了強制轉換大寫如果沒有雙引號的話)開銷,也有人說這些開銷可以忽略不計,不會有啥效能方面的問題。當然指令碼全部用大寫一致,可以避免同一指令碼由於大小寫問題多次解析,這是可以肯定的)。小弟不才,也不能確定,網上這方面的資料也少,希望大家能討論