假设我有这个功能:
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
之后是语法上的废话。)
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$;
致电(根据需要):
SELECT * FROM test_function('data1', 'data2', 'data3');
使用
LANGUAGE sql
,简单示例不需要 PL/pgSQL。但 VARIADIC
都适用。
使用
RETURNS SETOF integer
因为这显然可以返回多行。
参见: