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.
O que não consigo descobrir, no entanto, é como ou se posso determinar, para uma sessão estabelecida , o que a Oracle pensa que é o conjunto de caracteres do cliente atual.
Isso é possível em tudo?
Nota: SELECT * FROM NLS_SESSION_PARAMETERS;
não inclui o conjunto de caracteres (em 10g2).
Para deixar absolutamente claro o que eu gostaria de realizar:
- NLS_LANG é definido no ambiente do cliente para 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" ao Oracle (não ao ambiente do sistema operacional) qual é o conjunto de caracteres do cliente que o Oracle assumirá.
[*]: Se o aplicativo db for sqlplus, o exemplo ficaria assim:
...
sqlplus /nolog
connect user/pass@example
*magic command*;
CLIENT CHARACTERSET = ...
A nota de Jack em sua resposta levanta dois pontos importantes:
- Com a Oracle, que faz a tradução do conjunto de caracteres. É o código da biblioteca do cliente ou é feito no lado do servidor?
- Como parece que é o cliente, o cliente precisaria expor essa configuração - o que a lib/tool do cliente assume que é essa configuração. Existe alguma biblioteca/ferramenta do cliente Oracle (sqlplus, OCI/OCCI, Pro*C, ...) que possa ser consultada para saber o que essa configuração é?
Estou um pouco em dúvida de que isso é exatamente o que você está procurando, mas
mostra a variável de ambiente nls_lang do cliente no cliente.
Eu não acho que haverá uma consulta SQL que você pode executar para fornecer a configuração 'atual' porque AFAIK o servidor não está ciente de qual tradução é feita no lado do cliente, portanto, qualquer comando para mostrar a configuração atual terá que ser nativo para o cliente - usei o SQL Developer para o comando acima, mas suponho que funcionará da mesma forma no SQL*Plus
--editar
do AskTom :
e
Se você estava no 11.1+, você pode se divertir com v$session_connect_info, porque:
Mas descobri que ainda depende de como você está se conectando, por exemplo, do JDBC Thin Driver você não está usando OCI e, portanto, as informações não são enviadas
Você pode ver o seguinte :
Por exemplo: