как передать массив строк в функцию и использовать его в операторе «IN» в SQL - PullRequest
0 голосов
/ 12 июля 2020

Это может быть просто, но почему-то я все еще не понимаю. Как передать массив строк в функцию и использовать его в операторе «IN» в SQL

CREATE OR REPLACE function test_function(array_para text)
RETURNS TABLE (data text) 
AS $$
begin
    
    return query select col1 from my_table where my_table.col2 in(array_para)
END 
$$ 
LANGUAGE 'plpgsql';

и как его вызвать? может быть -

select test_function('''ABC'', ''MITT''')

1 Ответ

1 голос
/ 12 июля 2020

Вам нужно объявить параметр как массив, например text[]. Вам также не нужен PL / pg SQL для этого:

CREATE OR REPLACE function test_function(array_para text[])
RETURNS TABLE (data text) 
AS $$
  select col1 
  from my_table 
  where my_table.col2 = any (array_para)
$$ 
LANGUAGE sql;

Затем вызовите его с помощью:

select *
from test_function(array['ABC', 'MITT']);

Другой вариант - использовать параметр variadic:

CREATE OR REPLACE function test_function(variadic array_para text[])
RETURNS TABLE (data text) 
AS $$
  select col1 
  from my_table 
  where my_table.col2 = any (array_para)
$$ 
LANGUAGE sql;

Затем вы можете вызвать его с помощью:

select *
from test_function('ABC', 'MITT', 'DEF');
...