2010-05-10 126 views
1

Oracle 10g中是否存在將數據視爲不區分大小寫的設置?我看到了一個解決方案here。但是,這是在會話中完成的。我正在尋找的是一種架構或表上的設置,以將其數據視爲不區分大小寫。如果它正在進行會話,那麼我將不得不對所有存儲過程進行更改。如何使Oracle不區分大小寫

回答

2

沒有選擇讓模式或表格'不區分大小寫'。

  • 你可以做到這一點上的會話使用NLS_參數或做在整個實例受影響的數據庫初始化文件相同。
    但是,對於嚴格的平等搜索,這些搜索僅區分大小寫

  • 如果你需要使用LIKE然後你需要考慮使用REGEXP_LIKE。
    在REGEXP_LIKE的情況下,您不需要NLS_SORT設置,因爲REGEXP_LIKE有一個選項可以讓事情不區分大小寫。

+0

1爲答案和背景。我冒昧地設計你的答案.. – lexu 2010-05-11 05:09:57

2

大小寫敏感性是計算的基礎,簡單的理由是'yun'的ASCII值!='YUN'的ASCII值。所以,當你說...

考慮數據不區分大小寫

...你的意思只是爲了搜索的目的或爲存儲呢?

與每一個搜索執行情況的問題是這樣的:

SQL> create table t23 (id number, name varchar2(20)) 
    2/

Table created. 

SQL> create unique index t23_uk on t23(name) 
    2/

Index created. 

SQL> insert into t23 values (1, 'SAM-I-AM') 
    2/

1 row created. 

SQL> insert into t23 values (2, 'sam-i-am') 
    2/

1 row created. 

SQL> select id, name, ascii(name) from t23 
    2/

     ID NAME     ASCII(NAME) 
---------- -------------------- ----------- 
     1 SAM-I-AM      83 
     2 sam-i-am      115 

SQL> 

如果不區分大小寫的搜索是在模式或表級別,我們怎能區分「SAM-I-AM」「強制SAM-我是'?

它是 - 有點 - 可以強制不區分大小寫的數據存儲,儘管在單個列級別:

SQL> delete from t23 
    2/

2 rows deleted. 

SQL> drop index t23_uk 
    2/

Index dropped. 

SQL> create unique index t23_uk on t23(upper(name)) 
    2/

Index created. 

SQL> insert into t23 values (1, 'SAM-I-AM') 
    2/

1 row created. 

SQL> insert into t23 values (2, 'sam-i-am') 
    2/
insert into t23 values (2, 'sam-i-am') 
* 
ERROR at line 1: 
ORA-00001: unique constraint (APC.T23_UK) violated 


SQL>