传递参数来查看(设置返回功能?)

时间:2013-10-20 22:03:10

标签: sql postgresql stored-procedures parameter-passing plpgsql

我基本上有一个非常复杂的视图,目前返回我想要的上周聚合。

SELECT *
FROM ...
WHERE  t1.event_date >= ('now'::text::date - 7) 
...

现在我希望能够对任何给定的2个日期进行相同的计算,所以我希望能够将参数传递给我的视图。我想用以下内容替换WHERE子句:

WHERE  t1.event_date BETWEEN %first date% AND %second_date%

我认为我应该能够使用set return函数执行此操作,但无法确切知道如何执行此操作。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Create a function(有时称为表函数,返回一组行时)。 There are many (procedural) languages,特别是PL/pgSQL。在您的情况下LANGUAGE sql完成工作:

CREATE OR REPLACE FUNCTION get_user_by_username(d1 date, d2 date)
  RETURNS TABLE ( ... ) AS
$body$

SELECT ...
WHERE  t1.event_date >= $1
AND    t1.event_date <  $2  -- note how I exclude upper border

$body$ LANGUAGE sql;

LANGUAGE sql的众多例子之一:
Return rows from a PL/pgSQL function

LANGUAGE plpgsql的众多例子之一:
PostgreSQL: ERROR: 42601: a column definition list is required for functions returning "record"