【问题标题】:Pass parameters to view (set returning function?)将参数传递给视图(设置返回函数?)
【发布时间】:2013-10-29 06:56:44
【问题描述】:

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

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

现在我希望能够对任何给定的 2 个日期进行相同的计算,因此我希望能够将参数传递给我的视图。几乎我想用类似的东西替换 WHERE 子句:

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

我认为我应该能够使用集合返回函数来做到这一点,但无法确切地知道如何做到这一点。有什么想法吗?

【问题讨论】:

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


    【解决方案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"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      相关资源
      最近更新 更多