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:
GERMAN_GERMANY.WE8MSWIN1252
)[*]: 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:
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
nur der Client kennt auch seinen Zeichensatz - er ist "in der Datenbank" nicht verfügbar.
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 :
Z.B:
SQL> select sys_context('USERENV', 'NLS_TERRITORY') from dual;
SYS_CONTEXT('USERENV','NLS_TERRITORY')
--------------------------------------------------------------------------------
UNITED KINGDOM
1 row selected.