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

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

DDD
DDDoriginal
2025-01-10 07:55:41725parcourir

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

Utilisez les paramètres VARIADIC pour transmettre plusieurs valeurs dans un seul paramètre

Créer une fonction avec des paramètres VARIADIC

Afin de transmettre plusieurs valeurs à un seul paramètre, vous pouvez utiliser le type de données VARIADIC. Cela vous permet de spécifier un tableau de valeurs pour le paramètre. Modifiez la fonction suivante pour accepter un paramètre VARIADIC nommé job_ids :

<code class="language-sql">CREATE OR REPLACE FUNCTION test_var(VARIADIC job_ids int[])
RETURNS TABLE (
  job_id int,
  job_reference int,
  job_job_title text,
  job_status text
) AS $$
BEGIN
  RETURN QUERY
  SELECT
    jobs.id,
    jobs.reference,
    jobs.job_title,
    ltrim(right(jobs.status, -2)) AS status  -- 使用right()函数改进字符串处理
  FROM
    jobs
  INNER JOIN
    company c ON c.id = jobs.id  -- 使用INNER JOIN改进查询效率
  WHERE
    jobs."DeleteFlag" = '0' AND
    c.DeleteFlag = '0' AND
    c.active = '1' AND
    (jobs.id = ANY(job_ids) OR job_ids = '{ -1 }') -- 简化条件判断
  ORDER BY
    jobs.job_title;
END;
$$ LANGUAGE plpgsql;</code>

Fonction d'appel avec paramètres VARIADIC

Vous pouvez désormais appeler la fonction test_var en passant un tableau de valeurs au paramètre job_ids. Par exemple :

<code class="language-sql">SELECT * FROM test_var('{270, 378}');</code>

Cela renverra les données de travail avec les ID 270 et 378.

Améliorations des fonctions et suggestions supplémentaires

En plus d'utiliser le paramètre VARIADIC, vous pouvez également utiliser la fonction right() en combinaison avec une longueur négative pour couper les caractères au début de la chaîne, ce qui est plus rapide et plus simple que d'utiliser substring.

Assurez-vous également que le type de données de la colonne DeleteFlag est booléen et non texte. Cela garantit une comparaison et une efficacité correctes.

Enfin, la fonction f_test fournie dans la réponse démontre une fonction SQL concise qui évite l'utilisation de PL/pgSQL et résout ces problèmes. Il est recommandé de choisir la méthode de mise en œuvre des fonctions appropriée en fonction des besoins réels.

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