小编典典

在单个参数中传递多个值

sql

假设我有这个功能:

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 ($1) 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子句可以识别它?


阅读 280

收藏
2021-05-05

共1个答案

小编典典

您的函数将不会被创建。RETURN之后end是句法废话。

无论哪种方式,带有
VARIADIC
参数的函数都可以 完全满足 您的要求:

CREATE OR REPLACE FUNCTION test_function(VARIADIC varchar[])
 RETURNS SETOF integer AS
$func$
SELECT column2
FROM   test_table
WHERE  column1 = ANY($1);
$func$  LANGUAGE sql;

致电(根据需要):

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

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

使用,RETURNS SETOF integer因为这显然可以返回多行。

2021-05-05