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
Libérer: 2025-01-10 07:55:41
original
738 Les gens l'ont consulté

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 :

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;
Copier après la connexion

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 :

SELECT * FROM test_var('{270, 378}');
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal