1
resposta

Como 'corrigir' o filtro condicional

Na aula 06 chamada de Filtros Condicionais é demonstrado o código a seguir:

SELECT * FROM TB_CLIENTES WHERE NOME >='FERNANDO CAVALCANTE'; 

É explicado então pelo professor que a lista em ordem alfabética fica 'errada' devido ao fato da lista usar o É antes do F, assim fugindo da ordem alfabética.

Qual seria então uma correção para a lista estar em lista alfabetica no Português?

1 resposta

Olá Marcos, tudo bem?

Peço desculpas pela demora no retorno.

Diferentes de outros bancos de dados, o Oracle tem uma tabela interna que contém uma ordenação do alfabeto bem diferente do alfabeto que conhecemos, a tabela ASC. Nelas, os valores são classificados de forma numérica e os caracteres especiais também são incluídos. Outro ponto que também é importante é o idioma definido no seu banco de dados, pois idiomas diferentes têm ordens de classificação diferentes. Então, quando realizamos as consultas, o Oracle leva em consideração essa ordem numérica da tabela ASC e o idioma do banco de dados.

Porém, no Oracle existem alguns parâmetros que são utilizados para definir as configurações de data, número, moeda e idioma nacionais, são os parâmetros NLS (National Language Support - Suporte ao idioma nacional). Você pode ver quais as informações dos parâmetros NLS do seu banco de dados com a seguinte consulta:

 SELECT * FROM NLS_DATABASE_PARAMETERS;

Entre os parâmetros NLS, existem dois que são responsáveis por realizar a classificação linguística do banco de dados, ou seja, definem como será feita a classificação dos dados no momento de retornar o resultado, esses parâmetros são o NLS_SORT e NLS_COMP

  • NLS_SORT: Especifica o tipo de classificação para dados de caracteres, aceita como valor BINARY ou qualquer nome de classificação linguística válido e seu valor padrão deriva do parâmetro NLS_LANGUAGE, que é responsável por especificar o idioma padrão do banco de dados.
  • NLS_COMP: Afeta o comportamento de comparação das operações SQL e aceita três valores, o BINARY, LINGUISTIC ou ANSI para versões anteriores. Por padrão o seu valor é o BINARY.

Ao utilizar o valor BINARY, a comparação linguística é feita de forma binária, ou seja, baseia-se nos valores numéricos da tabela ASC. Já ao utilizar o valor LINGUISTIC A comparação é feita de forma linguística, ou seja, baseia-se nos valores seguindo a ordem alfabética.

Para que seja feita uma comparação linguística, o parâmetro NLS_COMP precisa estar definido como LINGUISTIC. Assim, será realizada uma comparação linguística seguindo a ordem alfabética.

Então, você pode alterar o valor do NLS_COMP para a sessão atual da seguinte forma:

ALTER SESSION SET NLS_COMP = LINGUISTIC;
  • O comando antes de alterar o NLS_COMP para LINGUISTIC

O comando antes de alterar o NLS_COMP para LINGUISTIC e realizando a comparação binaria

  • O comando após alterar o NLS_COMP para LINGUISTIC

 O comando após alterar o NLS_COMP para LINGUISTIC e realizando a camparação linguistica

Vou deixar aqui para você dois links de referência para consultas futuras onde há um maior detalhamento sobre os parâmetros NLS_SORT e NLS_COMP e sobre as Classificações e que podem ajudar a esclarecer sobre este assunto.

Espero ter ajudado, qualquer dúvida é só falar e bons estudos!