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 :
<code class="language-sql">CREATE OR REPLACE FUNCTION 函数名(VARIADIC 参数数据类型)</code>
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 :
<code class="language-sql">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;</code>
Cette fonction peut être appelée en passant plusieurs valeurs entières séparées par des virgules :
<code class="language-sql">SELECT * FROM test(270, 378);</code>
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 :
<code class="language-sql">SELECT * FROM test(VARIADIC '{1, 2, 3}'::int[]);</code>
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 :
<code class="language-sql">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;</code>
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!