Maison >base de données >tutoriel mysql >Comment puis-je transmettre plusieurs valeurs à un seul paramètre dans une fonction PostgreSQL ?

Comment puis-je transmettre plusieurs valeurs à un seul paramètre dans une fonction PostgreSQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-10 08:11:41279parcourir

How Can I Pass Multiple Values to a Single Parameter in a PostgreSQL Function?

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.

Syntaxe des paramètres 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.

Exemple de transmission de valeurs multiples

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>

Syntaxe alternative pour utiliser des tableaux

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>

Autres suggestions d'optimisation des performances

  • Utilisez l'argument négatif de la fonction right() pour supprimer les caractères au début de la chaîne, ce qui est plus rapide que d'utiliser la fonction substring().
  • Évitez d'utiliser des guillemets doubles autour des noms de colonnes, tels que "DeleteFlag".
  • Utilisez un type de données booléen approprié pour représenter le drapeau, plutôt qu'un type de données caractère, tel que text.

Fonction optimisée

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn