在单个参数中传递多个值

Passing multiple values in single parameter

假设我有这个功能:

CREATE OR REPLACE FUNCTION test_function(character varaying)
  RETURNS integer AS
$BODY$
DECLARE
some_integer integer;
begin
   Select column2 from test_table where column1 in () into some_integer;
end;
Return some_integer;
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;

我想这样称呼它:

Select * from test_function ('data1', 'data2','data3');

当然,不能这样做,因为 Postgres 试图找到具有这个名称和三个不存在的参数的函数。

我试图在逗号周围加上引号,但在那种情况下参数被解释错误:data1', 'data2','data3, 就像一个字符串。

有没有办法在参数中放入多个值以便 IN 子句可以识别它?

(不会创建您的函数。END 之后的 RETURN 是语法上的废话。)

带有 VARIADIC 参数的函数 完全 您所要求的:

CREATE OR REPLACE FUNCTION test_function(date, date, VARIADIC varchar[])
  RETURNS SETOF integer
  LANGUAGE sql AS
$func$
SELECT col1
FROM   test_table
WHERE  col3 > 
AND    col4 < 
AND    col2 = ANY()
$func$;

db<>fiddle here - 带附加参数的演示
sqlfiddle

致电(根据需要):

SELECT * FROM test_function('data1', 'data2', 'data3');

使用简单的SQL函数,简单示例不需要plpgsql。但是 VARIADIC 也适用于 plpgsql 函数。

使用 RETURNS SETOF integer 因为这显然可以 return 多行。

详情:

  • Pass multiple values in single parameter
  • Return rows matching elements of input array in plpgsql function
  • VARIADIC parameter must be the last input parameter
  • Return rows matching elements of input array in plpgsql function