我有以下 SQL 语句,其中 order by 子句是动态传递的。
如何将“按升序和降序排序”动态传递给 SQL?
SELECT table1.prod_id,table2.prod_name from table1 left outer join table2
ON table1.prod1 = table2.prod_id
ORDER BY CASE WHEN :odb = 1 THEN prod_id END
我要通行证
order by asc or desc
动态到上面的SQL,我怎样才能做到这一点?
最佳答案
您可以通过操作数字或数据值来解决@TonyAndrews 之类的问题。对于 VARCHAR2
动态 SQL 的替代方案可能是有两个表达式:
order by
case when :sorting='ASC' then col1 end ASC,
case when :sorting='DESC' then col1 end DESC
当
:sorting
具有值 'ASC'
结果ORDER BY
变得就像是:order by
col1 ASC,
NULL DESC
当
:sorting
具有值 'DESC'
结果ORDER BY
变得就像是:order by
NULL ASC,
col1 DESC
这种方法的一个缺点是优化器可以跳过 SORT 操作的那些情况,因为涉及的索引使数据已经按预期排序,当使用这样的 CASE 方法时不会发生这种情况。无论如何,这将强制执行排序操作。
关于SQL 动态 ASC 和 DESC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27015623/