我的表中总共有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, ','));
$$;
如果要传递多个值,则必须定义接受多个值的函数。有两种方式:
-
一个变差函数:
CREATE FUNCTION testing(VARIADIC first_name text[]) ...
这被称为类似
SELECT testing('arg1', 'arg2', 'arg3');
-
一种接受数组作为参数的函数:
CREATE FUNCTION testing(first_name text[]) ...
这被称为类似
SELECT testing(ARRAY['arg1', 'arg2', 'arg3']);