Iknowデータベースの文字セット(NLS_CHARACTERSET
select * from v$nls_parameters;
)およびクライアント文字セット(クライアント環境設定NLS_LANG
) 相互作用する。
しかし、私が見つけられないのは、確立されたセッションで、現在のクライアントの文字セットがどのように考えられているかを判断できるかどうかです。
これは可能ですか?
注意: SELECT * FROM NLS_SESSION_PARAMETERS;
はnotに文字セットを含めます(10g2上)。
私が達成したいことを完全に明確にするために:
GERMAN_GERMANY.WE8MSWIN1252
)[*]:dbアプリケーションがsqlplusの場合、例は次のようになります。
...
sqlplus /nolog
connect user/pass@example
*magic command*;
CLIENT CHARACTERSET = ...
彼の答えのジャックのノートは2つの重要なポイントを上げます:
これがまさにあなたが探しているものであることは少し疑わしいですが、
Host echo %nls_lang%;
ENGLISH_UNITED KINGDOM.WE8ISO8859P1
は、クライアントのクライアントnls_lang環境変数を示しています。
私はサーバーがクライアント側でどのような変換が行われたかを認識していないため、「現在の」設定を指定するために実行できるSQLクエリはないと思います。現在の設定を表示するコマンドはすべてネイティブである必要がありますクライアントへ-上記のコマンドにSQL Developerを使用しましたが、SQL * Plusでも同じように機能すると想定しています
-編集
AskTomから :
クライアントだけが自分の文字セットも知っています-「データベース」では利用できません
文字セットは、データベースに何が格納されているかを示します。
クライアントは、NLS_LANG設定を介して、目的の文字に変換された文字をデータベースに認識させます。
11.1以降を使用している場合は、v-session_connect_infoを使用して 多少の喜びがあるかもしれません を使用します。
この情報は、OCIによってログイン時にサーバーにプッシュされます。
しかし、それはまだ接続方法に依存していることを発見しました。たとえば、JDBC Thin DriverからOCIを使用していないため、情報はプッシュされません。
あなたは 以下 を見ることができます:
例えば:
SQL> select sys_context('USERENV', 'NLS_TERRITORY') from dual;
SYS_CONTEXT('USERENV','NLS_TERRITORY')
--------------------------------------------------------------------------------
UNITED KINGDOM
1 row selected.