Maison >base de données >tutoriel mysql >Comment puis-je transmettre plusieurs valeurs à un seul paramètre de fonction dans PostgreSQL ?
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>
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.
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!