ORACLE 對像名大小寫敏感性相關的深入分析 註: 1、 本文是以ORACLE9.2為測試分析版本 2、 本文中提到的ORACLE對像名包括ORACLE中的表名、視圖名、欄位名、函數名等等。 一般大家在進行Oracle開發或管理裡都不會對ORACLE對像名大小寫進行區別,因為ORALCE在普通情況下會將所有小寫都轉換為大寫進行處理,所以可以說是大小寫不敏感的。但是實際ORACLE內部有它一套完整的對像名處理方式。本文將從執行個體進行分析與探討ORACLE對像名大小寫敏感性的處理機制。 可能有些人員在工作已經瞭解到,ORACLE在建立對像時是可以加引號的,如果不加引號則不能使用特別字元,只能使用以字母開頭的命名。如果加了引號就可以在對像名裡使用任何字元,包括數字開頭、底線、逗號等等。在匯出SQLSERVER2000的對像建立指令碼時一般是加了引號的,所以經常有人說指令碼在ORACLE中運行後對像不能訪問的問題。 以下是筆者對建立表及訪問使用不同命名方式的一個執行個體,是筆者的機器上測試結果: Connected to Oracle9i Enterprise Edition Release 9.2.0.7.0 Connected as ***** SQL> create table mytable1 2 ( 3 C1 VARCHAR2(6) 4 ); Table created SQL> select * from "MYTABLE1"; C1 ------ SQL> select * from MYtable1; C1 ------ SQL> select * from "mytable1"; select * from "mytable1" ORA-00942: 表或視圖不存在 SQL> drop table mytable1; Table dropped SQL> SQL> SQL> create table "mytable1" 2 ( 3 C1 VARCHAR2(6) 4 ); Table created SQL> select * from "mytable1"; C1 ------ SQL> select * from mytable1; select * from mytable1 ORA-00942: 表或視圖不存在 SQL> select * from MYTABLE1; select * from MYTABLE1 ORA-00942: 表或視圖不存在 下表為筆者的測試結果匯總: √表示允許訪問,×表示不允許訪問。 執行個體:
| 讀取 建立 |
mytable1 |
MYTABLE1 |
“mytable1” |
“MYTABLE1” |
| mytable1 |
√ |
√ |
× |
√ |
| MYTABLE1 |
√ |
√ |
× |
√ |
| “mytable1” |
× |
× |
√ |
× |
| “MYTABLE1” |
√ |
√ |
× |
√ |
總結歸納:
| 讀取 建立 |
小寫字母 |
大寫字母 |
加引號小寫字母 |
加引號大寫字母 |
| 小寫字母 |
√ |
√ |
× |
√ |
| 大寫字母 |
√ |
√ |
× |
√ |
| 加引號小寫字母 |
× |
× |
√ |
× |
| 加引號大寫字母 |
√ |
√ |
× |
√ |
以下為根據筆者對ORACLE
資料字典及實際測試總結分析結論: ORACLE在建立對像時如果沒有加引號,對存入資料字典時都會將對像名小寫字母轉換成大寫字母儲存,如mytable將轉換成MYTABLE;如果建立時加了引號,則以引號內的實際字元儲存。 訪問時如果沒加引號則會將小寫字母轉換成大寫字母再訪問,如mytable將轉換成MYTABLE;如果加了引號則以引號內的實際字元訪問。 ORACLE在讀取資料字典時只要發現對像名裡有小寫字母或者是除字母漢字以外開頭的字元都認為是大小寫敏感的,並且要求在訪問時需要加上引號。 葉正盛(MKing) 2007-7-29