Entendendo os Parâmetros NLS no Oracle

Sergio BenderSergio Bender
3 min read

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?

  1. 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).

  2. Solução de Problemas: Identifica configurações que causam formatos inesperados (ex.: ponto em vez de vírgula em valores numéricos).

  3. 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 ou spfile):

      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 ajusta NLS_NUMERIC_CHARACTERS para .,, garantindo que números sejam exibidos como 1234.56 em vez de 1.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!

0
Subscribe to my newsletter

Read articles from Sergio Bender directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Sergio Bender
Sergio Bender