Fonction PostgreSQL passage multi-valeurs à paramètre unique
PostgreSQL fournit un moyen pratique de transmettre plusieurs valeurs à une fonction à l'aide d'un seul paramètre, ce qui peut être obtenu en utilisant le paramètre VARIADIC.
La syntaxe du paramètre VARIADIC est la suivante :
CREATE OR REPLACE FUNCTION 函数名(VARIADIC 参数数据类型)
Où, VARIADIC
indique que le paramètre peut accepter plusieurs valeurs. 参数数据类型
Spécifie le type de données de la valeur qui sera transmise.
Les fonctions suivantes acceptent plusieurs valeurs entières :
CREATE OR REPLACE FUNCTION test(VARIADIC int[]) RETURNS TABLE (job_id int, job_reference int, job_job_title text, job_status text) AS $$ BEGIN RETURN QUERY SELECT * FROM jobs WHERE job_id = ANY() ORDER BY job_job_title; END; $$ LANGUAGE plpgsql;
Cette fonction peut être appelée en passant plusieurs valeurs entières séparées par des virgules :
SELECT * FROM test(270, 378);
Dans PostgreSQL 9.1 ou version ultérieure, vous pouvez également appeler les fonctions de paramètres VARIADIC directement à l'aide de types de tableau. Le code suivant est équivalent à l'exemple précédent :
SELECT * FROM test(VARIADIC '{1, 2, 3}'::int[]);
right()
pour supprimer les caractères au début de la chaîne, ce qui est plus rapide que d'utiliser la fonction substring()
. "DeleteFlag"
. text
. En appliquant les optimisations ci-dessus, voici une version améliorée de la fonction originale :
CREATE OR REPLACE FUNCTION f_test(VARIADIC int[]) RETURNS TABLE (id int, reference int, job_title text, status text) AS $func$ SELECT id, reference, job_title, ltrim(right(status, -2)) AS status FROM company c JOIN job j USING (id) WHERE c.active AND NOT c.delete_flag AND NOT j.delete_flag AND id = ANY() ORDER BY job_title; $func$ LANGUAGE sql;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!