클라이언트의 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
'programing' 카테고리의 다른 글
Python: 데이터 프레임에서 시간 델타를 int로 변환 (0) | 2023.06.25 |
---|---|
Spring Boot Resource Server에서 보안 예외 처리 (0) | 2023.06.25 |
엑셀 시트 내의 지정된 범위에서 SQL 문을 실행하려면 어떻게 해야 합니까? (0) | 2023.06.25 |
Python AttributeError: 'module' 개체에 'Serial' 특성이 없습니다. (0) | 2023.06.25 |
Spring-Boot Jersey: Jersey가 정적 콘텐츠를 제공하도록 허용 (0) | 2023.06.25 |