如何在调用postgresql函数时将多个变量传递给同一个参数



我的表中总共有4条记录

id |                url                 |        name         | description | last_update
----+------------------------------------+---------------------+-------------+-------------
1 | https://www.postgresqltutorial.com | PostgreSQL Tutorial |             |
2 | http://www.oreilly.com             | O'Reilly Media      |             |
3 | https://www.google.com             | Google              |             | 2013-06-01
4 | http://www.postgresql.org          | PostgreSQL          |             |

我已经编写了一个函数,通过传递name作为参数来删除,现在我想传递多个名称,但我遇到了错误。

CREATE OR REPLACE FUNCTION testing(first_name varchar(255))
RETURNS INTEGER AS
$BODY$
DECLARE emp_id INTEGER;
BEGIN
SELECT id into emp_id from links e where name = first_name;

DELETE FROM links WHERE id = emp_id;
return emp_id;
END
$BODY$
LANGUAGE plpgsql;

从测试中选择*("谷歌,PostgreSQL"(;

错误:-没有与给定的名称和参数类型匹配的函数。您可能需要添加显式类型强制转换

由于您有一个逗号分隔的列表,您可以使用string_to_array函数将参数强制转换为数组,然后应用any运算符。此外,没有理由使用pgplsql,这可以写在一条sql语句中,然后将其封装到一个sql参数/函数中。(见演示(

create or replace procedure testing(first_names varchar(255))
language sql 
as $$
delete from links 
where name = any(string_to_array(first_names, ',')); 
$$;

如果要传递多个值,则必须定义接受多个值的函数。有两种方式:

  1. 一个变差函数:

    CREATE FUNCTION testing(VARIADIC first_name text[]) ...
    

    这被称为类似

    SELECT testing('arg1', 'arg2', 'arg3');
    
  2. 一种接受数组作为参数的函数:

    CREATE FUNCTION testing(first_name text[]) ...
    

    这被称为类似

    SELECT testing(ARRAY['arg1', 'arg2', 'arg3']);
    

最新更新