PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 23/08/2019 15:17:28

Jean-Marc68
Membre

SQL pour itération de fonction avec le contenu d'un champs en argument

Salut,

J'ai fais une fonction update "desactiver_couverts(numero_document integer)" qui prend un nombre en argument.
Maintenant que ma fonction fonctionne, je dois la faire fonctionner avec tous les nombres (dans l'ordre croissant de ces nombres, c'est important) contenus dans une colonne.
Le problème est que je ne sais pas (et je n'arrive pas en fonction de ce que j'ai trouvé) à faire l'itération qui va me permettre de rouler la fonction avec les nombres de la colonne en ordre ascendant.

Quelqu'un aurait-il un exemple de SQL à me montrer qui reprendrait un champs pour alimenter une fonction ?

Merci de vos z'avis z'avisés.

Hors ligne

#2 23/08/2019 19:00:59

Re : SQL pour itération de fonction avec le contenu d'un champs en argument

Salut
Tu utilise la commande DO et l'instruction for appliquer à un SELECT. De cette manière...

DO$$
declare l record;
begin
for l in select x from t order by x
loop
perform desactiver_couverts(x);
end loop;
end;$$ language plpgsql

Hors ligne

#3 23/08/2019 19:21:57

Jean-Marc68
Membre

Re : SQL pour itération de fonction avec le contenu d'un champs en argument

Je pensais qu'il y avait moyen de le faire sans passer par une autre fonction.
Je vais essayer cela.

Merci.

Dernière modification par Jean-Marc68 (23/08/2019 19:23:12)

Hors ligne

#4 23/08/2019 22:12:49

gleu
Administrateur

Re : SQL pour itération de fonction avec le contenu d'un champs en argument

Si la fonction ne renvoie qu'une ligne, il est plus simple de faire:

select desactiver_couverts(x) from t order by x

Guillaume.

Hors ligne

#5 24/08/2019 15:04:33

Re : SQL pour itération de fonction avec le contenu d'un champs en argument

Salut
Avec

select desactiver_couverts(x) from t order by x

la fonction ne va t'elle pas s'exécuter sur des lignes non ordonnée? puisque (je crois) que le order by s’exécute après la récupération des lignes.
@+

Dernière modification par alassanediakite (24/08/2019 15:05:40)

Hors ligne

#6 26/08/2019 13:43:46

gleu
Administrateur

Re : SQL pour itération de fonction avec le contenu d'un champs en argument

Non. Il va faire un parcours séquentiel sur t pour récupérer les lignes, les trier, puis appeler la fonction pour chaque ligne pour renvoyer les lignes du résultat.


Guillaume.

Hors ligne

#7 26/08/2019 18:38:01

Re : SQL pour itération de fonction avec le contenu d'un champs en argument

Salut
OK. Merci de la précision.
@+

Hors ligne

#8 26/08/2019 22:27:17

gleu
Administrateur

Re : SQL pour itération de fonction avec le contenu d'un champs en argument

Pour être complet, la récupération des lignes peut se faire déjà dans le bon ordre s'il existe un index sur x et que l'optimiseur de requêtes choisit d'utiliser cet index.


Guillaume.

Hors ligne

Pied de page des forums