在单个参数中传递多个值
Passing multiple values in single parameter
假设我有这个功能:
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 () 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 子句可以识别它?
(不会创建您的函数。END
之后的 RETURN
是语法上的废话。)
带有 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 >
AND col4 <
AND col2 = ANY()
$func$;
db<>fiddle here - 带附加参数的演示
旧sqlfiddle
致电(根据需要):
SELECT * FROM test_function('data1', 'data2', 'data3');
使用简单的SQL函数,简单示例不需要plpgsql。但是 VARIADIC
也适用于 plpgsql 函数。
使用 RETURNS SETOF integer
因为这显然可以 return 多行。
详情:
- Pass multiple values in single parameter
- Return rows matching elements of input array in plpgsql function
- VARIADIC parameter must be the last input parameter
- Return rows matching elements of input array in plpgsql function
假设我有这个功能:
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 () 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 子句可以识别它?
(不会创建您的函数。END
之后的 RETURN
是语法上的废话。)
带有 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 >
AND col4 <
AND col2 = ANY()
$func$;
db<>fiddle here - 带附加参数的演示
旧sqlfiddle
致电(根据需要):
SELECT * FROM test_function('data1', 'data2', 'data3');
使用简单的SQL函数,简单示例不需要plpgsql。但是 VARIADIC
也适用于 plpgsql 函数。
使用 RETURNS SETOF integer
因为这显然可以 return 多行。
详情:
- Pass multiple values in single parameter
- Return rows matching elements of input array in plpgsql function
- VARIADIC parameter must be the last input parameter
- Return rows matching elements of input array in plpgsql function