Как сделать Oracle нечувствительным к регистру
Есть ли в Oracle 10g параметр, позволяющий считать данные нечувствительными к регистру? Я видел решение здесь. Тем не менее, это делается на сессии. То, что я ищу, - это настройка либо в схеме, либо в таблице, чтобы считать ее данные нечувствительными к регистру. Если это в сеансе, то мне придется внести изменения во все хранимые процедуры.
2 ответа
Чувствительность к регистру имеет основополагающее значение для вычислений по той простой причине, что значение ASCII "yun"!= Значение ASCII "YUN". Итак, когда вы говорите...
считать данные нечувствительными к регистру
... Вы имеете в виду только для целей поиска или хранения?
Проблема с принудительным выполнением регистра при каждом поиске заключается в следующем:
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-I-AM?
В некотором роде возможно обеспечить нечувствительность к регистру для хранения данных, хотя и на уровне отдельных столбцов:
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>
Нет возможности сделать схему или таблицу "нечувствительными к регистру".
Вы можете сделать это в сеансе, используя параметры NLS_, или сделать то же самое в файле инициализации db, где затрагивается весь экземпляр.
Однако эти поиски нечувствительны к регистру только при поисках строгого равенства.Если вам нужно использовать LIKE, вам нужно рассмотреть возможность использования REGEXP_LIKE.
В случае REGEXP_LIKE вам не нужен параметр NLS_SORT, потому что есть опция для REGEXP_LIKE, чтобы он учитывал вещи без учета регистра.