Как сделать Oracle нечувствительным к регистру - PullRequest
1 голос
/ 10 мая 2010

Есть ли в Oracle 10g параметр, позволяющий считать данные нечувствительными к регистру? Я видел решение здесь . Однако это делается на сеансе. Что я ищу, так это настройку либо в схеме, либо в таблице, чтобы считать ее данные нечувствительными к регистру. Если это в сеансе, то мне придется внести изменения во все хранимые процедуры.

Ответы [ 2 ]

2 голосов
/ 11 мая 2010

Чувствительность к регистру имеет основополагающее значение для вычислений по той простой причине, что значение 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>
2 голосов
/ 10 мая 2010

Нет возможности сделать схему или таблицу «нечувствительными к регистру».

  • Вы можете сделать это в сеансе , используя параметры NLS_, или сделать то же самое в файле инициализации db, где затрагивается весь экземпляр.
    Однако эти поиски не чувствительны к регистру для строгого поиска на равенство.

  • Если вам нужно использовать LIKE , вам нужно рассмотреть возможность использования REGEXP_LIKE.
    В случае REGEXP_LIKE вам не нужен параметр NLS_SORT, потому что есть опция для REGEXP_LIKE, чтобы он учитывал вещи без учета регистра.

...