Entendendo os Parâmetros NLS no Oracle


No Oracle Database, os parâmetros NLS (National Language Support) definem como o banco gerencia linguagem, formatos de data, moeda, ordenação de strings e outros aspectos regionais.
Essas configurações são fundamentais para adaptar o comportamento do banco às necessidades de diferentes usuários ou regiões.
Neste artigo, apresento uma query para explorar os parâmetros NLS e mostro como criar uma trigger para personalizar o NLS_NUMERIC_CHARACTERS
para um usuário específico.
Para listar todos os parâmetros NLS ativos no seu banco pode usar a query abaixo:
SELECT * FROM v$nls_parameters;
O Que Ela Faz?
Essa query consulta a visão dinâmica v$nls_parameters
, exibindo os valores atuais dos parâmetros NLS no nível da sessão ou do banco.
Ao executar, você pode ver algo assim (resultados resumidos):
PARAMETER VALUE
--------------------- --------------------
NLS_LANGUAGE BRAZILIAN PORTUGUESE
NLS_TERRITORY BRAZIL
NLS_CURRENCY R$
NLS_DATE_FORMAT DD-MON-RR
NLS_NUMERIC_CHARACTERS ,.
NLS_CHARACTERSET AL32UTF8
Nesse exemplo fictício, o banco usa português brasileiro, reais (R$), e ,.
para números (ex.: 1.234,56
).
Por Que Isso é Útil?
Personalização Regional: Garante que datas, números e textos sejam exibidos conforme as preferências dos usuários (ex.:
1.234,56
no Brasil vs.1,234.56
nos EUA).Solução de Problemas: Identifica configurações que causam formatos inesperados (ex.: ponto em vez de vírgula em valores numéricos).
Documentação: Fornece uma visão rápida do ambiente NLS.
Como Ajustar os Parametros:
Sessão: Use
ALTER SESSION
para ajustes temporários:ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';
Banco: Ajuste no arquivo de inicialização (
init.ora
ouspfile
):ALTER SYSTEM SET NLS_NUMERIC_CHARACTERS = '.,' SCOPE=SPFILE;
- Reinicie o banco para aplicar.
Personalizando com uma Trigger
Às vezes, você precisa que certos usuários tenham configurações NLS específicas ao fazer login, sem alterar o padrão global. Por exemplo, o usuário TECDBA
pode precisar de NLS_NUMERIC_CHARACTERS = '.,'
(ponto decimal, vírgula de milhares) em vez do padrão do banco. Para isso, crie uma trigger de logon:
Criando a Trigger
CREATE OR REPLACE TRIGGER SET_USER_NLS_NUMERIC_CHARACTERS
AFTER LOGON ON DATABASE
BEGIN
IF USER IN ('EUSOUODBA') THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ''.,''';
END IF;
END;
/
Verificando a Trigger
Confirme que a trigger foi criada:
SELECT * FROM dba_objects
WHERE object_name = 'SET_USER_NLS_NUMERIC_CHARACTERS';
Testando o Ajuste
Como o usuario EUSOUODBA, execute:
SELECT VALUE FROM v$nls_parameters WHERE PARAMETER = 'NLS_NUMERIC_CHARACTERS';
- Saída esperada:
.,
.
Ou teste manualmente:
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';
SELECT TO_CHAR(1234.56, '9999D99') FROM DUAL;
- Saída:
1234.56
.
Como Funciona?
A trigger dispara após o logon de qualquer usuário no banco.
Se o usuário for
TECDBA
, ela ajustaNLS_NUMERIC_CHARACTERS
para.,
, garantindo que números sejam exibidos como1234.56
em vez de1.234,56
(padrão brasileiro, por exemplo).Outros usuários mantêm o padrão do banco.
Benefícios
Flexibilidade: Personaliza o ambiente por usuário sem alterar configurações globais.
Automação: Elimina a necessidade de ajustes manuais em cada sessão.
Conclusão
A query SELECT * FROM v$nls_parameters
é uma ferramenta essencial para entender e ajustar o comportamento regional do seu banco Oracle. Com ela, você diagnostica configurações e, usando triggers como a mostrada, personaliza a experiência para usuários específicos. Execute a query no seu ambiente e experimente a trigger — depois, compartilhe nos comentários como os parâmetros NLS afetam seu trabalho!
Subscribe to my newsletter
Read articles from Sergio Bender directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by