我有一个sql函数,它执行一个简单的sql select语句:
CREATE OR REPLACE FUNCTION getStuff(param character varying)
RETURNS SETOF stuff AS
$BODY$
select *
from stuff
where col = $1
$BODY$
LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)
现在我调用这个函数是这样的:
select * from getStuff('hello');
Run Code Online (Sandbox Code Playgroud)
如果我需要订购并限制结果order by
和limit
条款,我有哪些选择?
我想这样的查询:
select * from getStuff('hello') order by col2 limit 100;
Run Code Online (Sandbox Code Playgroud)
效率不高,因为表中的所有行都stuff
将由函数返回,getStuff
然后按限制排序和切片.
但即使我是对的,如何通过sql语言函数的参数传递顺序也没有简单的方法.只能传递值,而不能传递sql语句的一部分.
另一种选择是用plpgsql
语言创建函数,在那里可以构造查询并通过它来执行EXECUTE
.但这也不是一个非常好的方法.
那么,有没有其他方法可以实现这一目标?或者你会选择什么选择?在函数外部订购/限制,还是plpgsql?
我正在使用postgresql 9.1.
我修改了CREATE FUNCTION语句,如下所示:
CREATE OR REPLACE FUNCTION getStuff(param character varying, orderby character varying)
RETURNS SETOF stuff AS
$BODY$
select t.* …
Run Code Online (Sandbox Code Playgroud)