Информация
Здравствуйте, Гость Вход
 Карта сайта
Skip Navigation Links.
 
 Разное
 Oracle: Параметры NLS уровня сеанса
Параметры NLS уровня сеанса
Просмотров: 7491
Рекомендовано для:
  • Oracle Database 8i
  • Oracle Database 9i R1
  • Oracle Database 9i R2
  • Oracle Database 10g R1
  • Oracle Database 10g R2
  • Oracle Database 11g R1
  • Oracle Database 11g R2

Получить параметры NLS текущего сеанса можно выполнив запрос:

SELECT * FROM NLS_SESSION_PARAMETERS;

Эти настройки используются для текущего сеанса SQL.

Для применения настроек можно выполнить шаги:

1) Значение параметров устанавливается командой ALTER SESSION, например:

ALTER SESSION set NLS_DATE_FORMAT = 'DD/MM/YYYY';

2) Если предложение ALTER SESSION явно не указывает настройки, то они берутся из значений параметров NLS полученных из переменной окружения NLS_LANG.

3) Если NLS_LANG указана только с компонентом TERRITORY, то по умолчанию для языковых настроек (LANGUAGE) используется AMERICAN.
так, например, если выставить NLS_LANG=_BELGIUM.WE8MSWIN1252, то получим:

PARAMETER                      VALUE
------------------------------ --------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  BELGIUM
NLS_CURRENCY                   [знак евро]
NLS_ISO_CURRENCY               BELGIUM
....

 

Важно: следует различать варианты записи NLS_LANG=_BELGIUM.WE8MSWIN1252 (верно) и NLS_LANG=BELGIUM.WE8MSWIN1252 (неверно), должен быть указан разделитель _ (подчеркивание).

 

4) Если NLS_LANG указан только с компонентом язык (LANGUAGE) то часть касательно территории береться из настроек языка (LANGUAGE).
Выставляем NLS_LANG=ITALIAN_.WE8MSWIN1252 и получаем:

PARAMETER                      VALUE
------------------------------ --------------
NLS_LANGUAGE                   ITALIAN
NLS_TERRITORY                  ITALY
NLS_CURRENCY                   [знак евро]
NLS_ISO_CURRENCY               ITALY
.....

 

Важно: следует различать варианты записи NLS_LANG=ITALIAN_.WE8MSWIN1252 (верно) и NLS_LANG=ITALIAN.WE8MSWIN1252 (неверно), должен быть указан разделитель _ (подчеркивание).

 

5) Если NLS_LANG указан без территории (TERRITORY) и языка (LANGUAGE) - LANGUAGE_TERRITORY, то значение устанавливается равным AMERICAN_AMERICA. Например,  выставим NLS_LANG=.WE8MSWIN1252 и получим:

PARAMETER                      VALUE
------------------------------ ----------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
....

 

Важно: следует различать варианты записи NLS_LANG=.WE8MSWIN1252 (верно) и NLS_LANG=WE8MSWIN1252 (неверно), должен быть указан разделитель (.) - точка.

 

6) Если параметры NLS_LANG установлены как в пунктах 3, 4 или 5, то параметры NLS, например, NLS_SORT, NLS_DATE_FORMAT и т.д. могут быть выставлены самостоятельно и переписать существующие значения, полученные из частей описания территории и языка. Например, выставим NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252 и NLS_ISO_CURRENCY=FRANCE, тогда получим:

PARAMETER                      VALUE
------------------------------ -----------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               FRANCE
...

 

Важно:
-
Если NLS_DATE_LANGUAGE или NLS_SORT не установлены, то значения беруться из NLS_LANGUAGE
- Если NLS_CURRENCY, NLS_DUAL_CURRENCY, NLS_ISO_CURRENCY, NLS_DATE_FORMAT, NLS_TIMESTAMP_FORMAT, NLS_TIMESTAMP_TZ_FORMAT, NLS_NUMERIC_CHARACTERS не установлены, то значения беруться из NLS_TERRITORY

 

7) Если для NLS_LANG не выставлено никакого значения, то  значения по умолчанию:[LANGUAGE]_[TERRITORY].US7ASCII
для части [LANGUAGE]_[TERRITORY] используется значение найденное в NLS_INSTANCE_PARAMETERS. Параметры, типа NLS_SORT определенные на стороне клиента как независимые, игнорируются.

Итоги
  • Параметры NLS выставляемые клиентом для сеанса (NLS_SESSION_PARAMETERS) всегда имеют приоритет над параметрами экземпляра (NLS_INSTANCE_PARAMETERS) и базы данных (NLS_DATABASE_PARAMETERS)
  • Эти параметры не могут быть отменены сервером, таким образом, параметры установленные клиентом всегда стоят выше по приоритету над параметрами экземпляра и базы данных
  • Параметры выставленные для сеанса (NLS_SESSION_PARAMETERS) не видны другим сеансам и никак не влияют на них
    NLS_LANGUAGE в параметрах сеанса определяет и язык для вывода сообщений Oracle
  • Нельзя установить параметры NLS в SQL скрипте, требуется использовать ALTER SESSION
  • В Windows существует два пути установки NLS_LANG, обычно определяется в реестре, но так же может быть прописано в переменных окружения. Не рекомендуется прописывать настройки NLS в переменных окружения, потому что переменные окружения имеют приоритет над значениями реестра и распространяются на все ORACLE_HOME на сервере, если настройки определяются как системная переменная окружения
  • Клиентская часть NLS_LANG не отображается в системных таблицах или представлениях
  • NLS_LANG нельзя изменить через ALTER SESSION, NLS_LANGUAGE и NLS_TERRITORY можно. Как правило, NLS_LANGUAGE и/или NLS_TERRITORY не могут быть выставлены как независимые параметры в переменных окружения или реестре на стороне клиента
27 мая 2010 г.