Триггер входа в систему Oracle не срабатывает - PullRequest
4 голосов
/ 19 ноября 2008

Я использую следующий триггер входа в систему в базе данных Oracle 10.2:

CREATE OR REPLACE TRIGGER AlterSession_trg
AFTER LOGON ON DATABASE
BEGIN
  EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_COMP=LINGUISTIC';
  EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_SORT=BINARY_AI';
END AlterSession_trg;

Это сделано для того, чтобы запросы с учетом регистра ушли в прошлое, и когда я подключаюсь из PL / SQL Developer, это действительно так. Однако, когда я подключаюсь из SQL Developer или приложения ASP.NET, я работаю над запросами, снова чувствительными к регистру. В любом случае SQL Developer / .NET может пропустить этот триггер? Я неправильно установил курок?

Ответы [ 4 ]

2 голосов
/ 19 ноября 2008

Oracle SQL Developer изменяет параметры NLS в зависимости от предпочтений. (Инструменты -> Настройки ... -> База данных -> Параметры NLS)

Возможно, ваше приложение .NET также изменяет параметры NLS, перезаписывая настройки триггера.

Вы пробовали установить NLS_COMP и NLS_SORT в качестве переменных среды ?

1 голос
/ 20 ноября 2008

Это отсортированный SQL Developer. Я нашел решение для приложения .NET, когда заглянул в решение для переменных среды; Я обновил SPFILE, и теперь целая куча запросов, у которых были проблемы с кейсами, работает правильно.

Команды, которые я выполнял, были:

ALTER SYSTEM SET NLS_COMP=LINGUISTIC SCOPE SPFILE;
ALTER SYSTEM SET NLS_SORT=BINARY_AI SCOPE SPFILE;
1 голос
/ 19 ноября 2008

Я думаю, вам следует, чтобы ваш администратор БД внес эти изменения, а не полагался на триггер. Вы можете столкнуться с проблемами, если они по какой-либо причине станут недействительными.

0 голосов
/ 21 ноября 2008

Так же, как к вашему сведению, вам нужно быть осторожным с манипулированием переменными сеанса, чтобы обрабатывать поиск без учета регистра.

Если вы выполните запросы через db-ссылку на экземпляр базы данных, который является Oracle версии 9.2 или более ранней, с этими переменными сеанса, вы получите ошибки ORA-00600, потому что переменная сеанса, которой вы манипулируете в Oracle 10.2, не существует в Oracle 9.2 или более ранней версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...