Короткие заметки по Oracle


Проблема с NLS_LANG

В случаях, когда в качестве языка и кодировки для БД не выбрано значение по умолчанию, при работе в консоли sqlplus может возникнуть проблема отображения ответных сообщений:

[oracle@database ~]$ sqlplus            <1>
Enter user-name: / as sysdba            <2>

SQL> select;                            <3>
select
     *
ERROR at line 1:
ORA-00936: ??????????? ?????????        <4>
  1. Запуск sqlplus
  2. Авторизация
  3. Запуск тестового (неполного) запроса
  4. Информация об ошибке не читается

Причиной неверного отображения сообщений является несоответствие значения переменной окружения NLS_LANG с соответствующими значениями в БД.

Для решения этой проблемы сначала необходимо определить текущие NLS настройки БД, а точнее значение трёх параметров:

  • NLS_LANGUAGE
  • NLS_TERRITORY
  • NLS_CHARACTERSET
SQL> select VALUE from NLS_DATABASE_PARAMETERS where PARAMETER='NLS_LANGUAGE';
VALUE
RUSSIAN

SQL> select VALUE from NLS_DATABASE_PARAMETERS where PARAMETER='NLS_TERRITORY';
VALUE
RUSSIA

SQL> select VALUE from NLS_DATABASE_PARAMETERS where PARAMETER='NLS_CHARACTERSET';
VALUE
AL32UTF8

Переменная окружения NLS_LANG имеет формат:

language_territory.characterset

Остаётся установить подходящее для этой БД значение переменной NLS_LANG и приступить к работе в консоли sqlplus в нормальном режиме:

[oracle@database ~]$ export NLS_LANG=RUSSIAN_RUSSIA.AL32UTF8    <1>
[oracle@database ~]$ sqlplus                                    <2>
Enter user-name: / as sysdba                                    <3>

SQL> select;                                                    <4>
select
     *
ERROR at line 1:
ORA-00936: отсутствует выражение                            <5>
  1. Установка значения переменной NLS_LANG
  2. Запуск sqlplus
  3. Авторизация
  4. Запуск тестового (неполного) запроса
  5. Информация об ошибке теперь читается