programing

클라이언트의 NLS_LANG를 확인하려면 어떻게 해야 합니까?

magicmemo 2023. 6. 25. 18:37
반응형

클라이언트의 NLS_LANG를 확인하려면 어떻게 해야 합니까?

Windows OS에서 작업 중입니다. 이 설정이 레지스트리에 저장되어 있다는 것을 알고 있습니다.문제는 레지스트리 경로가 버전 간에 변경되어 레지스트리 키 묶음을 검색하는 것이 결코 좋은 생각이 아니라는 것입니다.

나는 그것을 얻을 수 있습니다.NLS_LANG서버의SELECT USERENV ('language') FROM DUAL.

저는 Pl/Sql Developer와 마찬가지로 클라이언트 설정과 비교하여 일치하지 않을 때 경고를 표시하고 싶습니다.

인코딩 문제를 해결할 때 이 작업을 수행합니다.(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)

Jocke의 답변(고마워 Jocke)에 따라 다음 질문을 테스트했습니다.

SELECT DISTINCT client_charset FROM v$session_connect_info
WHERE sid = sys_context('USERENV','SID');

완벽하게 작동하지만, 필요한 권한을 가진 사용자가 있는지는 잘 모르겠습니다.

sql*plus의 경우를 제외하고는 매번 이 작업이 가능한지 확신할 수 없습니다.

variable n varchar2(200)

execute sys.dbms_system.get_env('NLS_LANG', :n )

print n

AMERICAN_AMERICA.WE8ISO8859P1

기능 래퍼를 만들고 필요한 사용자에게 실행 권한을 부여하면 됩니다.

언급URL : https://stackoverflow.com/questions/11522800/how-do-i-check-the-nls-lang-of-the-client

반응형