Métodos de Ordenação Personalizada em SQL
Em muitas aplicações, é necessário fornecer resultados de consulta ordenados de acordo com requisitos específicos. Existem várias abordagens para implementar ordenação personalizada em SQL, conforme discutido abaixo:
1. Ordenação Nível de Instrução SQL
Para aplicações que exigem ordenação específica em determinados pontos do sistema, você pode configurar diretamente nas instruções SQL:
- Ordenação padrão do Oracle: ```
SELECT * FROM tabela ORDER BY coluna (DESC|ASC);
(A ordenação padrão é ascendente; para campos numéricos, a ordenação ascendente ou descendente é explícita) - Ordenação persoanlizada: ```
SELECT * FROM tabela ORDER BY
CASE WHEN coluna = 'valor1' THEN 1
WHEN coluna = 'valor2' THEN 2
WHEN coluna = 'valor3' THEN 3
WHEN coluna = 'valor4' THEN 4
ELSE 5 END;
2. Métodos de Ordenação para Chinês
Para ordenar dados chinesos, existem métodos específicos (a ordenação padrão para chinês geralmente segue a ordem fonética):
- Ordenação por pinyin: ```
SELECT * FROM tabela ORDER BY NLSSORT(coluna, 'NLS_SORT=SCHINESE_PINYIN_M');
- Ordenação por traços de caracteres: ```
SELECT * FROM tabela ORDER BY NLSSORT(coluna, 'NLS_SORT=SCHINESE_STROKE_M');
- Ordenação por radical: ```
SELECT * FROM tabela ORDER BY NLSSORT(coluna, 'NLS_SORT=SCHINESE_RADICAL_M');
Nota importante: Com grandes volumes de dados, essas consultas podem ser lentas. De acordo com a documentação oficial do Oracle, a criação de índices segue a ordem binária das chaves. Quando NLS_SORT é definido como BINARY, o otimizador pode usar índices para cláusulas ORDER BY. Para qualquer ordenação linguística, o otimizador deve incluir uma varredura completa da tabela e uma classificação completa no plano de execução.
Para otimizar, você pode criar um índice linguístico:
CREATE INDEX indice_linguistico ON minha_tabela (NLSSORT(nome, 'NLS_SORT = SCHINESE_PINYIN_M'));
3. Configuração de Ordenação Nível de Sessão
Se você precisar de um método de ordenação específico para toda a sessão, configure-o no nível da sessão:
- Por pinyin:
ALTER SESSION SET NLS_SORT = SCHINESE_PINYIN_M; - Por traços:
ALTER SESSION SET NLS_SORT = SCHINESE_STROKE_M; - Por radical:
ALTER SESSION SET NLS_SORT = SCHINESE_RADICAL_M;
4. Configuração de Ordenação Nível de Sistema
Para aplicar uma ordenação específica a todo o sistema (menos comum):
- No Windows: Modificar o registro em
HKLC\SOFTWARE\ORACLE\home0\NLS_SORT - Em outros sistemas: Definir a variável de ambiente
export NLS_SORT=SCHINESE_RADICAL_M