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.