Eu sei como o conjunto de caracteres do banco de dados ( NLS_CHARACTERSET
in select * from v$nls_parameters;
) e o conjunto de caracteres do cliente (a configuração do ambiente do cliente NLS_LANG
) interagem.
No entanto, o que não consigo descobrir é como ou se posso determinar, para uma sessão estabelecida , qual é o Oracle que o conjunto de caracteres do cliente atual é.
Isso é possível em tudo?
Nota: SELECT * FROM NLS_SESSION_PARAMETERS;
se não incluir o conjunto de caracteres (em 10G2).
Para deixar absolutamente claro o que eu gostaria de realizar:
- NLS_LANG é definido no ambiente do cliente com um valor arbitrário (por exemplo
GERMAN_GERMANY.WE8MSWIN1252
) - O aplicativo de banco de dados [*] inicia e estabelece uma conexão / sessão com o banco de dados Oracle.
- O aplicativo de banco de dados [*] deseja "perguntar" à Oracle (não ao ambiente do SO) qual será o conjunto de caracteres do cliente que a Oracle assumirá.
[*]: Se o aplicativo db for sqlplus, o exemplo seria da seguinte maneira:
...
sqlplus /nolog
connect user/pass@example
*magic command*;
CLIENT CHARACTERSET = ...
A nota de Jack em sua resposta levanta dois pontos importantes:
- Com o Oracle, quem faz a tradução do conjunto de caracteres. É o código da biblioteca do cliente ou é feito no lado do servidor?
- Como parece ser o cliente, o cliente precisaria expor essa configuração - qual a lib / ferramenta do cliente assume essa configuração. Existe alguma das bibliotecas / ferramentas do cliente Oracle (sqlplus, OCI / OCCI, Pro * C, ...) que pode ser consultada sobre o que ela acha que é essa configuração?