假设我有这个功能:
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子句可以识别它?
答案 0 :(得分:0)
您的功能不会被创建。 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
,因为这显然可以返回多行。
详细说明:
SQL Fiddle演示。