Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

SQL Dinâmico ASC e DESC


Você pode fazer soluções como @TonyAndrews manipulando valores numéricos ou de dados. Para VARCHAR2 uma alternativa ao SQL dinâmico poderia ser ter duas expressões:
order by
   case when :sorting='ASC' then col1 end ASC,
   case when :sorting='DESC' then col1 end DESC

Quando :sorting tem o valor 'ASC' o resultado desse ORDER BY fica como se fosse:
order by
   col1 ASC,
   NULL DESC

Quando :sorting tem o valor 'DESC' o resultado desse ORDER BY fica como se fosse:
order by
   NULL ASC,
   col1 DESC

Uma desvantagem desse método é que aqueles casos em que o otimizador pode pular uma operação SORT porque há um índice envolvido que torna os dados já classificados como desejado, isso não acontecerá ao usar o método CASE como este. Isso exigirá uma operação de classificação, não importa o quê.