我想知道是否有办法将WHERE
子句中的参数移动到函数调用中:
例如:
SELECT * FROM table1
WHERE a1 = ‘abc’ AND a2 = ‘def’;
但我希望将查询重写为:
SELECT * FROM func1('a1=abc','b1=def');
对象table1是什么并不重要,但我想它可能是一个VIEW。在任何情况下,我都想为用户提供如上所示的界面,从而隐藏函数调用。
答案 0 :(得分:1)
您可以创建一个可以像这样调用的集合返回函数:
SELECT *
FROM func1('abc', 'def');
该功能如下所示:
create or replace function func1(text, text)
returns setof table1
as
$body$
SELECT * FROM table1 WHERE a1 = $1 and a2 = $2
$body$
LANGUAGE SQL;
手册中的更多细节:
http://www.postgresql.org/docs/current/static/xfunc-sql.html
您还可以将where子句附加到select:
SELECT *
FROM func1('abc', 'def')
WHERE some_col > 100;