Т. е. запрос вида
select * from tbl1 order by decode(:order_param, 1, param1, 2, param2, param3)будет работать. Причем на "стоимость" запроса это не повлияет так как сортировка делается после выборки данных.
К сожалению используя этот способ нельзя менять направление сортировки с asc на desc. Но в таком случае может помочь аналитическая функция row_number()
select * fromВ этом примере, с помощю функции row_number() мы присваевам каждой строке номер который она получила бы в отсортированном массиве. А в обрамляющем запросе мы или просто сортируем запрос по этому столбцу чтобы получить прямую сортировку, или сортируем по 1/rn и получаем обратную сортировку
(select param1, param2, param3, row_number() over (order by decode(:param_num, 1, param1, 2, param2, 3, param3)) rn from tbl1)
order by decode(:order_destination, 'desc', 1/rn, rn)
Внимание: второй способ я еще не проверял так что он может быть невполне работоспособен, хотя в самом принципе я уверен
P.S. наконец набрал в гугле sql syntax highliter и нашел подсветку для запросов, теперь форматирование запросов будет красивое и одинаковое :)