Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL Dynamisches ASC und DESC

Sie können Lösungen wie @TonyAndrews ausführen, indem Sie numerische oder Datenwerte bearbeiten. Für VARCHAR2 Eine Alternative zu dynamischem SQL könnte darin bestehen, zwei Ausdrücke zu haben:

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

Beim :sorting hat den Wert 'ASC' das Ergebnis dieses ORDER BY wird wie wenn es gewesen wäre:

order by
   col1 ASC,
   NULL DESC

Beim :sorting hat den Wert 'DESC' das Ergebnis dieses ORDER BY wird wie wenn es gewesen wäre:

order by
   NULL ASC,
   col1 DESC

Ein Nachteil dieser Methode besteht darin, dass die Fälle, in denen der Optimierer eine SORT-Operation überspringen kann, weil ein Index beteiligt ist, der die Daten bereits wie gewünscht sortiert, bei Verwendung der CASE-Methode wie dieser nicht passieren. Dies wird in jedem Fall eine Sortieroperation vorschreiben.