2012-07-17 51 views
10

私はWindows OSで作業していますが、この設定がレジストリに格納されていることがわかりました。問題は、レジストリパスがバージョンからバージョンに変わり、その一連のレジストリキーは確かに良い考えではありませんが、参照することです。クライアントのNLS_LANGを確認するにはどうすればよいですか?

サーバーのNLS_LANGSELECT USERENV ('language') FROM DUALで取得できます。

私はそれをクライアント設定と比較し、Pl/Sql Developerと同様に、一致しないときに警告を表示したいと考えています。

+0

NLS_SESSION_PARAMETERS、NLS_DATABASE_PARAMETERSおよびNLS_INSTANCE_PARAMETERSを見ましたか? http://docs.oracle.com/cd/E11882_01/server.112/e25513.pdf – Glenn

+2

クライアントのNLS_LANGを除いて、すべてのものが提供されます。 –

+2

セッション・ビューでは、探しているものが表示されませんか? select * from nls_session_parametersここで、parameter = 'NLS_LANGUAGE'です。セッションの設定を変更するnls_language = german; select * from nls_session_parametersここで、parameter = 'NLS_LANGUAGE'です。 – Glenn

答えて

6

これは、エンコードの問題をトラブルシューティングするときに行うことです。 (SQLPLUSで読み取りNLS_LANG値):

SQL>/* It's a hack. I don't know why it works. But it does!*/ 
SQL>@[%NLS_LANG%] 
SP2-0310: unable to open file "[NORWEGIAN_NORWAY.WE8MSWIN1252]" 

あなたは、レジストリから現在のORACLE_HOMEでのNLS_LANGの値を抽出する必要があります。 すべてのクライアント側ツール(sqlplus、sqlldr、exp、imp、ociなど)はレジストリ からこの値を読み取り、文字コード変換が発生するかどうかを判断します。

ORACLE_HOMEおよびレジストリセクション:

検索のカップルとあなたがあります:私はアイデアを証明するためにIPythonに向けるこのような時代に

C:\>dir /s/b oracle.key 
C:\Oracle10\BIN\oracle.key 

C:\>type C:\Oracle10\BIN\oracle.key 
SOFTWARE\ORACLE\KEY_OraClient10204_Home 

In [36]: OHOMES_INSTALLED = !where oci.dll 

In [37]: OHOMES_INSTALLED 
Out[37]: 
['C:\\Oracle10\\BIN\\oci.dll', 
'C:\\oraclexe\\app\\oracle\\product\\11.2.0\\server\\bin\\oci.dll'] 

In [38]: ORACLE_HOME = os.path.dirname(OHOMES_INSTALLED[0]) 

In [39]: ORACLE_HOME 
Out[39]: 'C:\\Oracle10\\BIN' 

In [40]: f = open(os.path.join(ORACLE_HOME, "oracle.key")) 

In [41]: SECTION = f.read() 

In [42]: SECTION 
Out[42]: 'SOFTWARE\\ORACLE\\KEY_OraClient10204_Home\n' 

In [43]: from _winreg import * 

In [44]: aReg = ConnectRegistry(None,HKEY_LOCAL_MACHINE) 

In [46]: aKey = OpenKey(aReg,SECTION.strip()) 

In [47]: val = QueryValueEx(aKey, "NLS_LANG") 

In [48]: print val 
(u'NORWEGIAN_NORWAY.WE8MSWIN1252', 1) 
+0

ありがとう、これは回避策です。残念ながら、私はそれを行うことはできません。私が望んでいたのは、迅速なチェックを行うことでした。HDで完全に検索すると答えは出ますが、時間がかかりすぎます(また、信頼できるものではなく、その名前のファイルが他にもある可能性があります)。だから、もし私がそれを正しく理解すれば、簡単な方法はありません。私は、新しいリリースごとに変わるその狂ったレジストリキーをブラウズする必要があります。そうですか?その場合、私はちょうどそれを落とすと思う。努力する価値はありません。 –

0

私は、これは、SQLのすべての時間を動作しますが、私のためならば*わからないプラス:

変数n VARCHAR2(200)

はsys.dbms_system.get_env( 'NLS_LANG' を実行し、 :N)

印刷N

AMERICAN_AMERICA.WE8ISO8859P1

関数ラッパーをビルドし、それを必要とするユーザーに実行を許可してください。

+0

テストの後に。 GET_ENVは、クライアントからのパラメータをサーバプロセスから取得しません。だから、私が望むようにうまくいかない。申し訳ありません:-( – Jocke

+0

掘り下げた後、私はデータベースが実際に接続されたセッションごとにクライアント文字セットを格納していることを発見しました: SELECT sid、client_charset FROM v $ session_connect_info; – Jocke

関連する問題