Możesz robić rozwiązania takie jak @TonyAndrews, manipulując wartościami liczbowymi lub danymi. Dla VARCHAR2
alternatywą dla dynamicznego SQL może być posiadanie dwóch wyrażeń:
order by
case when :sorting='ASC' then col1 end ASC,
case when :sorting='DESC' then col1 end DESC
Kiedy :sorting
ma wartość 'ASC'
wynik tego ORDER BY
staje się tak, jakby to było:
order by
col1 ASC,
NULL DESC
Kiedy :sorting
ma wartość 'DESC'
wynik tego ORDER BY
staje się tak, jakby to było:
order by
NULL ASC,
col1 DESC
Jedną z wad tej metody jest to, że przypadki, w których optymalizator może pominąć operację SORT, ponieważ jest zaangażowany indeks, który powoduje, że dane są już posortowane w pożądany sposób, nie wystąpią przy użyciu metody CASE w ten sposób. Będzie to wymagać operacji sortowania bez względu na wszystko.