it-swarm.com.de

Oracle Session Client-Zeichensatz bestimmen?

Ich weiß wie der Datenbankzeichensatz (NLS_CHARACTERSET im select * from v$nls_parameters;) und der Client-Zeichensatz (die Client-Umgebungseinstellung NLS_LANG) interagieren.

Was ich jedoch nicht herausfinden kann, ist, wie oder ob ich feststellen kann, für eine etablierte Sitzung, was Oracle für den aktuellen Client-Zeichensatz hält.

Ist das überhaupt möglich?

Hinweis: SELECT * FROM NLS_SESSION_PARAMETERS; enthält nicht den Zeichensatz (auf 10g2).

Um absolut klar zu machen, was ich erreichen möchte:

  1. NLS_LANG wird in der Clientumgebung auf einen beliebigen Wert gesetzt (z. B. GERMAN_GERMANY.WE8MSWIN1252)
  2. Die Datenbankanwendung [*] startet und stellt eine Verbindung/Sitzung zur Oracle-Datenbank her.
  3. Die Datenbankanwendung [*] möchte "fragen" Oracle (nicht die Betriebssystemumgebung), welchen Client-Zeichensatz Oracle annehmen wird.

[*]: Wenn die Datenbankanwendung sqlplus ist, sieht das Beispiel wie folgt aus:

...
sqlplus /nolog
connect user/[email protected]
*magic command*;
   CLIENT CHARACTERSET = ...

Jacks Notiz in seiner Antwort wirft zwei wichtige Punkte auf:

  • Mit Oracle führt who die Zeichensatzübersetzung durch. Ist es der Client-Bibliothekscode oder wird er auf der Serverseite ausgeführt?
  • Wie es scheint, ist es der Client, der Client müsste diese Einstellung verfügbar machen - was die Client-Bibliothek/das Client-Tool für diese Einstellung annimmt. Gibt es eine der Oracle-Client-Bibliotheken/-Tools (sqlplus, OCI/OCCI, Pro * C, ...), die nach ihrer Meinung nach abgefragt werden können?
9
Martin

Ich bin ein wenig zweifelhaft, dass dies genau das ist, wonach Sie suchen, aber

Host echo %nls_lang%;

ENGLISH_UNITED KINGDOM.WE8ISO8859P1

zeigt die Umgebungsvariable des Clients nls_lang auf dem Client an.

Ich glaube nicht, dass es eine SQL-Abfrage geben wird, die Sie ausführen können, um die 'aktuelle' Einstellung anzugeben, da AFAIK dem Server nicht bekannt ist, welche Übersetzung clientseitig durchgeführt wird. Daher muss jeder Befehl zum Anzeigen der aktuellen Einstellung nativ sein an den Client - Ich habe SQL Developer für den obigen Befehl verwendet, aber ich gehe davon aus, dass es in SQL * Plus genauso funktioniert

--bearbeiten

von AskTom :

nur der Client kennt auch seinen Zeichensatz - er ist "in der Datenbank" nicht verfügbar.

nd

der Zeichensatz beschreibt, was in der Datenbank gespeichert ist.

der Client macht das gewünschte übersetzte Zeichen über die NLS_LANG-Einstellung in der Datenbank bekannt.

Wenn Sie auf 11.1+ waren, Sie könnten etwas Freude haben mit v $ session_connect_info, weil:

Diese Informationen werden von OCI zum Zeitpunkt der Anmeldung an den Server übertragen.

Ich habe jedoch festgestellt, dass es immer noch davon abhängt, wie Sie eine Verbindung herstellen, z. B. vom JDBC Thin Driver, dass Sie OCI nicht verwenden und die Informationen daher nicht übertragen werden

Sie können sehen die folgenden :

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

Z.B:

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

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

1 row selected.
0
Gaius