sql >> データベース >  >> RDS >> Oracle

クライアントのNLS_LANGを確認するにはどうすればよいですか?

    これは、エンコーディングの問題をトラブルシューティングするときに行うことです。 (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とレジストリセクション:

    C:\>dir /s/b oracle.key
    C:\Oracle10\BIN\oracle.key
    
    C:\>type C:\Oracle10\BIN\oracle.key
    SOFTWARE\ORACLE\KEY_OraClient10204_Home
    

    このようなとき、私はIPythonを使用してアイデアを示します。

    いくつかのルックアップとあなたはそこにいます!

    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)
    


    1. MySQLとMariaDBでの偶発的なデータ削除を克服する方法

    2. MySQLでインデックスを作成する方法

    3. JSON_OBJECT()–MySQLのキー/値ペアのリストからJSONオブジェクトを作成します

    4. SQLServerの再構築インデックスクエリ