假设我有这个功能:
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子句可以识别它?
您的函数将不会被创建。RETURN之后end是句法废话。
RETURN
end
无论哪种方式,带有 VARIADIC 参数的函数都可以 完全满足 您的要求:
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因为这显然可以返回多行。
RETURNS SETOF integer