【发布时间】:2013-03-14 19:11:55
【问题描述】:
我有以下函数用于从表中检索一批 Id。这个函数被用作OFFSET 和LIMIT 子句似乎提供了很差的性能。
CREATE OR REPLACE FUNCTION getBatch(_workloadId VARCHAR, _offSet INT, _limit INT)
RETURNS SETOF NUMERIC AS $$
DECLARE
c SCROLL CURSOR FOR
SELECT id FROM workload WHERE workload_id = $1 ORDER BY id ASC;
BEGIN
OPEN c;
MOVE FORWARD $2 IN c;
RETURN QUERY FETCH FORWARD 10 FROM c;
END;
$$ LANGUAGE plpgsql;
我希望将 FETCH FORWARDcount 作为参数传入,但我无法找到执行此操作的方法。引用 $3 不起作用,我还尝试了以下方法:
EXECUTE 'RETURN QUERY FETCH FORWARD ' || $3 || ' FROM c;';
任何帮助将不胜感激。
【问题讨论】:
-
我的回答是否回答了你的问题?
-
您好欧文,感谢您的回复。对不起,我花了这么长时间才发表评论。需求改变意味着问题变得没有实际意义。我很欣赏您提供的解决方案,但是
FETCH FORWARD count确实有效,除了count值不能是动态的。所以FETCH FORWARD 10很乐意返回 10 个结果。
标签: sql postgresql cursor plpgsql postgresql-9.2