Передача нескольких значений в одном параметре
Допустим, у меня есть эта функция:
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 могло его распознать?
1 ответ
Ваша функция не будет создана. 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
так как это может, очевидно, вернуть несколько строк.
Подробности:
- Передать несколько значений в одном параметре
- Вернуть строки, соответствующие элементам входного массива в функции plpgsql
- Параметр VARIADIC должен быть последним входным параметром
- Вернуть строки, соответствующие элементам входного массива в функции plpgsql
SQL Fiddle demo с дополнительными параметрами.