Bonjour à tous,
Voici mon problème :
Je dois créer une fonction qui prend en paramètre un nombre variable d'identifiants (numériques).
Cette même fonction doit vérifier si ces identifiants existent dans une table et afficher les données correspondantes.
Moyennant une astuce, j'ai réussi à faire ce que je voulais. Mais ce n'est pas très efficient et j'aimerais une meilleure façon de le réaliser.
Voici donc ce à quoi je suis arrivé :
La fonction reçoit un tableau d'identifiant sous forme de texte et va rechercher dans la table "myTable" les champs "annee" et "id" lorsqu'on retrouve id dans le texte entré en paramètre (entre virgules en fait, car il s'agit d'un tableau).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE OR REPLACE FUNCTION fct(listeIDs text) RETURNS SETOF record AS $$ SELECT DISTINCT annee, id FROM myTable WHERE $1 LIKE '%,' || CAST(id AS TEXT) || ',%' GROUP BY annee, id $$ LANGUAGE sql;
Un petit exemple d'appel à cette fonction :
Juste pour info, mais pas nécessaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT * FROM fct('[,4504,6229,5,6,]') AS (Annee numeric, Id numeric);
j'ai simplement ajouté des virgules autour des premiers et derniers identifiants afin que si l'on cherche '2', il ne soit pas trouvé dans '6229'.
Si vous avez une meilleure façon de réaliser cela, je suis preneur.
Merci d'avance pour votre aide et vos conseils...
Partager