Определить набор символов клиента сеанса Oracle?


9

Я знаю, как взаимодействуют набор символов базы данных ( NLS_CHARACTERSETin select * from v$nls_parameters;) и набор символов клиента (параметр среды клиента NLS_LANG).

Однако я не могу выяснить, как или если я могу определить для установленного сеанса , что Oracle считает текущим клиентским набором символов.

Это вообще возможно?

Примечание: SELECT * FROM NLS_SESSION_PARAMETERS;это не включает набор символов (на 10Г2).

Чтобы было абсолютно ясно, чего я хотел бы достичь:

  1. NLS_LANG устанавливается в клиентской среде на произвольное значение (например GERMAN_GERMANY.WE8MSWIN1252)
  2. Приложение базы данных [*] запускается и устанавливает соединение / сеанс с базой данных Oracle.
  3. Приложение базы данных [*] хочет «спросить» у Oracle (а не в своей среде ОС), какой клиентский набор символов будет принимать Oracle.

[*]: Если приложение db - sqlplus, пример будет выглядеть следующим образом:

...
sqlplus /nolog
connect user/pass@example
*magic command*;
   CLIENT CHARACTERSET = ...

Записка Джека в его ответе поднимает два важных момента:

  • С Oracle, который делает перевод набора символов. Это код клиентской библиотеки или это делается на стороне сервера?
  • Поскольку это, кажется, клиент, клиент должен был бы выставить этот параметр - то, что клиентский lib / tool предполагает, что этот параметр является. Есть ли какие-либо из клиентских библиотек / инструментов Oracle (sqlplus, OCI / OCCI, Pro * C, ...), к которым можно обратиться с запросом о том, что это за параметр?

Ответы:


9

Я немного сомневаюсь, что это именно то, что вы ищете, но

host echo %nls_lang%;

ENGLISH_UNITED KINGDOM.WE8ISO8859P1

показывает клиентскую переменную среды nls_lang на клиенте.

Я не думаю, что будет SQL-запрос, который вы можете запустить, чтобы задать «текущий» параметр, потому что AFAIK сервер не знает, какой перевод выполняется на стороне клиента, поэтому любая команда для отображения текущего параметра должна быть нативной. клиенту - я использовал SQL Developer для вышеуказанной команды, но я предполагаю, что она будет работать так же в SQL * Plus

--редактировать

от AskTom :

только клиент знает свой набор символов - он недоступен "в базе данных"

а также

набор символов описывает, что хранится в базе данных.

клиент делает их желаемое преобразованное в символьное знание [sic] в базу данных через урегулирование NLS_LANG.

Если вы работали в 11.1+, вы могли бы порадоваться v $ session_connect_info, потому что:

Эта информация отправляется OCI на сервер за время входа в систему.

Но я обнаружил, что это все равно будет зависеть от того, как вы подключаетесь, например, от тонкого драйвера JDBC, который вы не используете OCI, и поэтому информация не передается


Ну, нет, это не совсем то, что я искал :-) - Но вы подняли (два) важные замечания, и если это правда, я думаю, это будет приемлемый ответ. Я добавлю два пункта к вопросу.
Мартин

Ба! (не винить вас) Но у Oracle действительно есть это: «только клиент также знает свой набор символов - он недоступен« в базе данных » » и «клиент делает… известным базе данных через NLS_LANG« are на самом деле вполне утверждаю обратное, нет? :-)
Мартин

Да, вы правы, хотя Том <> Oracle. Я думаю, что он спотыкается о своих словах - вся эта тема стоит
того, чтобы ее прочесть

1
Принято ответ для 1-й ссылки - потому что этот вопрос в Ask Tom (от 2002) фактически задает одно и то же: «Я хотел бы знать, возможно ли проверить настройки NLS_LANG на стороне клиента в любом из представлений v $ или nls_ после подключения к база данных. "
Мартин

0

Вы можете увидеть следующее :

  • NLS_CALENDAR
  • NLS_CURRENCY
  • NLS_DATE_FORMAT
  • NLS_DATE_LANGUAGE
  • NLS_SORT
  • NLS_TERRITORY

Например:

SQL> select sys_context('USERENV', 'NLS_TERRITORY') from dual;

SYS_CONTEXT('USERENV','NLS_TERRITORY')
--------------------------------------------------------------------------------
UNITED KINGDOM

1 row selected.

Я думаю, что упоминание sys_context здесь полезно. Иначе это не решит проблему того, какой набор символов .
Мартин

Я хочу сказать, что это единственные вещи, о которых сервер знает (или заботится).
Гай
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.