2014-10-18 2 views
-2

Я Тринг установить чувствительны к регистру параметры, такие как команды нижеOracle Case Нечувствительность настройки

ALTER SESSION SET NLS_COMP=LINGUISTIC; 
ALTER SESSION SET NLS_SORT=BINARY_CI; 

и

ALTER SYSTEM SET NLS_COMP=LINGUISTIC; 
ALTER SYSTEM SET NLS_SORT=BINARY_CI; 

, но когда он не работает. Может ли кто-нибудь помочь мне с этой проблемой?

Я печатаю первый ALTER SESSION, он работает только на SQL Developer, но только в первый раз. Когда я открываю новое соединение, он не работает.

Я печатаю второй, ALTER SESSION SET NLS_COMP = LINGUISTIC, в настройках отображается NLS_COMP = LINGUISTIC; но при открытии нового соединения он снова не работает. Я имею в виду, когда я ищу с строчными буквами, как

SELECT * 
FROM users 
WHERE username like 'conan' 

и моя username является CONAN он cannt найти

+0

Что вы подразумеваете под "не работает"? – Mat

+3

Вы только меняете сеанс, поэтому, если вы открываете новый сеанс, это не сработает, нет ... – Ben

+1

Кажется, что существует немного путаница между сеансом и соединением. Соединение - это фактическое соединение (обычно сокет через TCP/IP) между клиентом и сервером. Он используется клиентом для связи с сервером и сервером для ответа на запросы клиента. Сеанс - это процесс (или поток) на сервере, который был создан для этого соединения, для обслуживания клиента. Это считывает запрос клиента из соединения, выполняет/обслуживает запрос и затем отвечает на запрос клиенту через соединение. –

ответ

2

ALTER SESSION SET NLS_COMP = лингвистический;

ALTER SESSION SET NLS_SORT = BINARY_CI;

Этот оператор влияет только на текущий сеанс, когда вы открываете новый сеанс, предыдущий сеанс изменения в предыдущем сеансе не повлияет на новый сеанс. Если вы хотите, чтобы все сессии были нечувствительны к регистру, используйте AFTER LOGON TRIGGER и выдайте те же утверждения, используя динамический sql.

Например,

CREATE OR REPLACE TRIGGER case_insensitive_trg 
AFTER LOGON ON SCHEMA 
BEGIN 
    execute immediate 'alter session set NLS_SORT=BINARY_CI'; 
    execute immediate 'alter session set NLS_COMP=LINGUISTIC'; 
END; 
/

Для получения более подробной информации о регистронезависимых сортов и сравнивает, пожалуйста, прочитайте Oracle – Case Insensitive Sorts & Compares

Что касается, уровня системы,

ALTER SYSTEM SET NLS_COMP=LINGUISTIC SCOPE SPFILE; 
ALTER SYSTEM SET NLS_SORT=BINARY_AI SCOPE SPFILE; 

Вы, конечно, можете делать все, что вы хотите, конечно, это ваша база данных. Но я не буду рекомендовать делать такое на системном уровне. Это чрезмерный уровень на системном уровне и ненужный прием к проблемам производительности.

Обновление: путаница между сеансом и соединением

Соединения актуально соединение (как правило, сокет через TCP/IP) между клиентом и сервером. Он используется клиентом для связи с сервером и сервером для ответа на запросы клиента .

Сессия - это процесс (или поток) на сервере, созданный для этого соединения , для обслуживания клиента. Это считывает запрос клиента из соединения, выполняет/обслуживает запрос и затем отвечает на запрос клиенту через соединение.

Таким образом, сеанс чтения и ответить назад запрос клиента через соединение.

+0

Я пришел к чему-то странному, читая документацию для ['ALTER SESSION'] (http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_2012.htm). В нем говорилось: «Используйте инструкцию ALTER SESSION для установки или изменения каких-либо условий или параметров, которые влияют на ваше ** соединение **, в базу данных». _ Как и я, я, однако, о * соединении * как физический путь к БД и * сеанс * устанавливаются по соединению для запроса БД. Для _shared server_ у вас может быть несколько сеансов по одному соединению. Так ALTER SESSION меняет _session_ или _connection_? –

+0

По моему опыту с ним, который я также поделил здесь http://lalitkumarb.wordpress.com/2014/01/22/oracle-case-insensitive-sorts-compares/, он изменит текущий сеанс, выполняющий сеанс alter заявление. Если новый сеанс открыт, это не будет затронуто. –

+0

Я тоже был почти уверен в этом, но, используя слово «соединение» istead «session», документация вставила мне немного сомнений. –

Смежные вопросы