sql >> Base de Datos >  >> RDS >> Oracle

SQL ASC y DESC dinámicos

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.