Vous pouvez faire des solutions comme @TonyAndrews en manipulant des valeurs numériques ou de données. Pour VARCHAR2
une alternative au SQL dynamique pourrait être d'avoir deux expressions :
order by
case when :sorting='ASC' then col1 end ASC,
case when :sorting='DESC' then col1 end DESC
Quand :sorting
a pour valeur 'ASC'
le résultat de ce ORDER BY
devient comme si ça avait été :
order by
col1 ASC,
NULL DESC
Quand :sorting
a pour valeur 'DESC'
le résultat de ce ORDER BY
devient comme si ça avait été :
order by
NULL ASC,
col1 DESC
Un inconvénient de cette méthode est que les cas où l'optimiseur peut ignorer une opération SORT car il y a un index impliqué qui rend les données déjà triées comme souhaité, cela ne se produira pas lors de l'utilisation de la méthode CASE comme celle-ci. Cela imposera une opération de tri quoi qu'il arrive.