Du kan göra lösningar som @TonyAndrews genom att manipulera numeriska eller datavärden. För VARCHAR2
ett alternativ till dynamisk SQL kan vara att ha två uttryck:
order by
case when :sorting='ASC' then col1 end ASC,
case when :sorting='DESC' then col1 end DESC
När :sorting
har värdet 'ASC'
resultatet av den ORDER BY
blir som om det hade varit:
order by
col1 ASC,
NULL DESC
När :sorting
har värdet 'DESC'
resultatet av den ORDER BY
blir som om det hade varit:
order by
NULL ASC,
col1 DESC
En nackdel med den här metoden är att de fall där optimeraren kan hoppa över en SORT-operation eftersom det finns ett index inblandat som gör att data redan sorteras som önskat, det kommer inte att hända när man använder CASE-metoden som denna. Detta kommer att kräva en sorteringsoperation oavsett vad.