我正在创建一个在PostgreSQL数据库中更新表格的存储过程(函数),其更新取决于其输入。为了创建一个可变数量的参数函数,我创建了一个额外的输入参数称为“模式”,我用它来控制我在更新查询中使用哪些参数。
CREATE OR REPLACE FUNCTION update_site(
mode integer,
name character varying,
city character varying,
telephone integer,
)
RETURNS integer AS
$$
BEGIN
IF mode = 0 THEN
BEGIN
UPDATE "Sites" SET
("City","Telephone") = (city,telephone)
WHERE "SiteName" = name;
RETURN 1;
EXCEPTION WHEN others THEN
RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE;
RETURN 0;
END;
ELSIF mode = 1 THEN
BEGIN
UPDATE "Sites" SET "City" = city
WHERE "SiteName" = name;
RETURN 1;
EXCEPTION WHEN others THEN
RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE;
RETURN 0;
END;
ELSIF mode = 2 THEN
BEGIN
UPDATE "Sites" SET "Telephone" = telephone
WHERE "SiteName" = name;
RETURN 1;
EXCEPTION WHEN others THEN
RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE;
RETURN 0;
END;
ELSE
RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE;
RETURN 0;
END IF;
END;
$$ LANGUAGE plpgsql;
最好的方法是什么?是创建一个函数update_site(<表中的所有列>)
和一个单独的函数update_site(id integer, <要更新的varchar列>)
,还是使用一种模式在一个函数中定义区别?哪个选项更有效率?是一个独特的函数还是为每个目的而不同的函数?
VARIADIC
或多态参数更为普遍。 - Erwin Brandstetter