在单个参数中传递多个值

问题描述 投票:0回答:1

假设我有这个功能:

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

sql postgresql parameter-passing plpgsql
1个回答
0
投票

(你的函数不会被创建。

RETURN
END
之后是语法上的废话。)

带有

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 > $1
AND    col4 < $2
AND    col2 = ANY($3)
$func$;

fiddle - 带有附加参数的演示
sqlfiddle

致电(根据需要):

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

使用

LANGUAGE sql
,简单示例不需要 PL/pgSQL。但
VARIADIC
都适用。

使用

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

参见:

© www.soinside.com 2019 - 2024. All rights reserved.