使用多个参数调用postgres函数

时间:2014-07-09 12:43:13

标签: sql function postgresql

这是我在postgresql中的sql函数:

FUNCTION test(year integer)
  RETURNS SETOF json AS
$BODY$
    SELECT  ARRAY_TO_JSON(ARRAY_AGG(T))
    FROM table t
    WHERE year = $1;
$BODY$

这非常有效。但现在我想指定更多的参数和 如果参数设置,我想获得条件的返回。例如,在函数调用之后:

test(year := 2014, location := 'Belo Horizonte')

该功能应该如何以及在何处设置条件?这是我的(错误的)建议:

FUNCTION test(year integer, location text)
      RETURNS SETOF json AS
    $BODY$
        SELECT  ARRAY_TO_JSON(ARRAY_AGG(T))
        FROM table t
        IF $1 IS SET THEN
        WHERE year = $1
        ELSIF $2 THEN
        UNION
        WHERE location = $2
        END IF;
    $BODY$

进一步的挑战是返回此声明的功能:

test(year := 1584)
-- should return all entries with year 1584

test(location := 'Cambridge')
-- should return all entries with location Cambridge

test(year := 1584, location := 'Cambridge')
-- should return all entries with year 2014 AND location Belo Horizonte

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试执行类似的操作,添加默认值以及使用OR子句

FUNCTION test(year integer DEFAULT -1, location text DEFAULT 'noLocation')
      RETURNS SETOF json AS
    $BODY$
      SELECT  ARRAY_TO_JSON(ARRAY_AGG(T))
        FROM table t
        WHERE ($1 = -1 OR  year = $1)
        AND   ($2 = 'noLocation' OR  location = $2);
    $BODY$