在 Oracle Sql 中按顺序绑定变量

Bind Variables in order by in OracleSql

我需要根据 UI 中的用户设置的标准进行不同的排序。例如可以是

order by a asc, b desc, c asc , d asc

order by b asc, a desc, c desc , d desc

它可以是我从 UI 中做出的任何组合。如何在 OracleSql 中使用 Bind Variablesmulesoft 3.9[=12= 中将其传递给 order by ]

您不能使用绑定变量来指定列名。绑定变量只传递值。

假设列数据类型兼容,你可以做这样的事情,并根据需要重复尽可能多的排序选项,如果数据类型不兼容,将 case 语句拆分为一对(asc,desc ) 对于每组兼容的数据类型:

select * from your_table
 order by case case :col_1_dir when 'desc' then null else :col_1 end
             when 'a' then a
             when 'b' then b
             when 'c' then c
             when 'd' then d
             else null
          end
        , case case :col_1_dir when 'asc' then null else :col_1 end
             when 'a' then a
             when 'b' then b
             when 'c' then c
             when 'd' then d
             else null
          end desc
        , case case :col_2_dir when 'desc' then null else :col_2 end
             when 'a' then a
             when 'b' then b
             when 'c' then c
             when 'd' then d
             else null
          end
        , case case :col_2_dir when 'asc' then null else :col_2 end
             when 'a' then a
             when 'b' then b
             when 'c' then c
             when 'd' then d
             else null
          end desc