Fonctions avec un nombre variable de paramètres d'entrée

Je suis en création d'une procédure stockée (fonction) dans un PostgreSQL DB, ce qui met à jour une table en fonction de son entrée. Dans le but de créer un nombre variable de paramètre de la fonction, je suis de la création d'un supplément de paramètre d'entrée appelé mode, que j'utilise pour contrôler les paramètres que j'utilise sur la requête de mise à jour.

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;

Ce qui serait le mieux? Pour créer une fonction update_site(<all the columns of table>) et une fonction distincte update_site(id integer, <varchar column to update>), ou utiliser le mode en une seule fonction pour définir la différence? Quelle option est la plus efficace? Une fonction unique ou différentes pour chaque but?

OriginalL'auteur anairinac | 2013-05-28