如何基于Oracle sql中的参数获取动态Order,根据条件中的任何一个Dynamic Order by进行绑定,我的查询有什么问题请帮忙解决这个问题。参数值将动态传递对于用户。
SELECT actionstatus,
id
FROM rdt_orderdetail
WHERE id IN (45565,44033,45761,45543,45495,43472,42462,43477)
CASE WHEN ':user' = 'supplier THEN ORDER BY id
ELSE ORDER BY actionstatus
END
答案 0 :(得分:4)
尝试这样的事情:
SELECT actionstatus,
id
FROM rdt_orderdetail
WHERE id IN (45565,44033,45761,45543,45495,43472,42462,43477)
order by (CASE WHEN ':user' = 'supplier THEN id
ELSE actionstatus END)
答案 1 :(得分:1)
您想使用动态订单吗?然后你将不得不使用动态SQL: - )
create or replace function GET_DETAILS(iField in varchar2) return sys_refcursor is
aQuery varchar2(1000);
aCursor SYS_REFCURSOR;
begin
aQuery := 'select actionstatus,id from rdt_orderdetail
where id in (45565,44033,45761,45543,45495,43472,42462,43477)
order by ' || case iField when 'sup' then 'id' else 'actionstatus' end;
open aCursor for aQuery;
return aCursor;
end;
/
答案 2 :(得分:0)
您不能在CASE
子句之外使用SELECT
。
此外'sup'
总是等于'sup'
,所以无论如何它都没有。见到
关于整个逻辑 - 您对整个结果集进行排序,因此可以通过id
或actionstatus
进行排序。您不能在id
之前订购几行,而在actionstatus