将参数从WHERE子句移动到函数调用(PostgreSQL)

时间:2012-01-26 12:58:44

标签: database postgresql database-design

我想知道是否有办法将WHERE子句中的参数移动到函数调用中:

例如:

SELECT * FROM table1
WHERE a1 = ‘abc’ AND a2 = ‘def’;

但我希望将查询重写为:

SELECT * FROM func1('a1=abc','b1=def');

对象table1是什么并不重要,但我想它可能是一个VIEW。在任何情况下,我都想为用户提供如上所示的界面,从而隐藏函数调用。

1 个答案:

答案 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;