如何在 PL/SQL 过程中生成动态 Order by 子句?

rav*_*avi 2 sql oracle plsql

我正在尝试编写一个 PL/SQL 过程,它将通过 SQL 查询来获取结果。但要求是 order by 可以是动态的,主要是为了对屏幕中的列进行排序。我向此过程传递 2 个参数 - in_sort_column 和 in_sort_order。要求在文本列上按 ASC 排序,而在数字列上按 DESC 排序。我的查询看起来像这样,没有添加 in_sort_order -

SELECT col1, col2, col3 from tabl e1 where col1 > 1000 
ORDER BY decode(in_sort_column,'col1', col1, 'col2', col2, 'col3', col3);
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚在这种情况下如何使用 in_sort_order 参数。以前做过这个的人可以帮忙吗?

谢谢

Gor*_*off 5

进行动态排序时,我建议使用单独的子句:

order by (case when in_sort_column = 'col1' then col1 end),
         (case when in_sort_column = 'col2' then col2 end),
         (case when in_sort_column = 'col3' then col3 end)
Run Code Online (Sandbox Code Playgroud)

如果列的类型不同,这可以保证您不会遇到类型转换方面的意外问题。请注意,casereturnNULL不带else子句。