【发布时间】:2018-09-21 08:22:22
【问题描述】:
按照this link 中提到的方法,我想将ORDER BY 和排序顺序动态传递给函数。
ORDER BY 工作正常,但我无法通过排序顺序 (ASC / DESC)。
我现在拥有的:
CREATE OR REPLACE FUNCTION list(_limit integer,_offset integer,sort_by varchar(100), _order varchar(100),_category varchar(100))
RETURNS TABLE(
id INTEGER,
name VARCHAR,
clientname VARCHAR,
totalcount BIGINT
) AS
$$
DECLARE
empty text := '';
BEGIN
RETURN Query EXECUTE
'SELECT d.id,
d.name,
d.clientname,
count(*) OVER() AS full_count FROM design_list as d
where ($5 = $6 Or d.category Ilike $5)
ORDER BY ' || quote_ident(sort_by) || ' LIMIT $1 offset $2'
USING _limit,_offset,sort_by, _order,_category, empty;
END;
$$ LANGUAGE plpgsql;
【问题讨论】:
-
我一点也不明白。为什么在同一个语句中将串联与 USING/$ 混合?当你不使用
$3和$4时,为什么要在USING中放入5 个参数(排序_by 和_order,碰巧)?你订购了sort_by,根本不使用_order,并说订购有效而排序无效???
标签: postgresql sql-order-by plpgsql dynamic-sql