Oracle
 sql >> Base de données >  >> RDS >> Oracle

SQL Dynamique ASC et DESC

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.