Puede hacer soluciones como @TonyAndrews manipulando valores numéricos o de datos. Para VARCHAR2
una alternativa al SQL dinámico podría ser tener dos expresiones:
order by
case when :sorting='ASC' then col1 end ASC,
case when :sorting='DESC' then col1 end DESC
Cuando :sorting
tiene el valor 'ASC'
el resultado de ese ORDER BY
se vuelve como si hubiera sido:
order by
col1 ASC,
NULL DESC
Cuando :sorting
tiene el valor 'DESC'
el resultado de ese ORDER BY
se vuelve como si hubiera sido:
order by
NULL ASC,
col1 DESC
Una desventaja de este método es que aquellos casos en los que el optimizador puede omitir una operación SORT porque hay un índice involucrado que hace que los datos ya estén ordenados como se desea, eso no sucederá cuando se use el método CASE como este. Esto exigirá una operación de clasificación pase lo que pase.