Oracle
 sql >> Database >  >> RDS >> Oracle

SQL dinamico ASC e DESC

Puoi fare soluzioni come @TonyAndrews manipolando valori numerici o di dati. Per VARCHAR2 un'alternativa all'SQL dinamico potrebbe essere quella di avere due espressioni:

order by
   case when :sorting='ASC' then col1 end ASC,
   case when :sorting='DESC' then col1 end DESC

Quando :sorting ha il valore 'ASC' il risultato di quel ORDER BY diventa come se fosse stato:

order by
   col1 ASC,
   NULL DESC

Quando :sorting ha il valore 'DESC' il risultato di quel ORDER BY diventa come se fosse stato:

order by
   NULL ASC,
   col1 DESC

Uno svantaggio di questo metodo è che quei casi in cui l'ottimizzatore può saltare un'operazione SORT perché è coinvolto un indice che rende i dati già ordinati come desiderato, ciò non accadrà quando si utilizza il metodo CASE in questo modo. Ciò imporrà un'operazione di smistamento, qualunque cosa accada.