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ê.