一、解決方案
1、在表名、字段名、對象名上加上雙引號,即可實現讓oracle大小寫區分。
2、但是這又引起了另一個問題:在數據庫操作中,sql語句中相應的表名、字段名、對象名上一定要加雙引號。
解決辦法是:使用"\"轉義。如:
String sql = "select * from userinfo where?\"loginId\"=? and loginpwd=?";
二、詳解
一 般情況下,使用者在進行Oracle開發或管理里都不會對ORACLE對像名大小寫進行區別,因為ORALCE在普通情況下會將所有小寫都轉換為大寫進行 處理,所以可以說是大小寫不敏感的。但是實際ORACLE內部有它一套完整的對像名處理方式。本文將從實例進行分析與探討ORACLE對像名大小寫敏感性 的處理機制。
可 能很多人在工作已經了解到,ORACLE在創建對像時是可以加引號的,如果不加引號則不能使用特別字符,只能使用以字母開頭的命名。如果加了引號就可以在 對像名里使用任何字符,包括數字開頭、下劃線、逗號等等。在導出SQLSERVER2000的對像創建腳本時一般是加了引號的,所以經常有人說腳本在 ORACLE中運行后對像不能訪問的問題。
注:
1、 本文是以ORACLE9.2為測試分析版本
2、 本文中提到的ORACLE對像名包括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在創建對像時如果沒有加引號,對存入數據字典時都會將對像名小寫字母轉換成大寫字母存儲,如mytable將轉換成MYTABLE;如果創建時加了引號,則以引號內的實際字符存儲。
訪問時如果沒加引號則會將小寫字母轉換成大寫字母再訪問,如mytable將轉換成MYTABLE;如果加了引號則以引號內的實際字符訪問。
ORACLE在讀取數據字典時只要發現對像名里有小寫字母或者是除字母漢字以外開頭的字符都認為是大小寫敏感的,并且要求在訪問時需要加上引號。