Vous n'êtes pas identifié(e).
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
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
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
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
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
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
Salut
OK. Merci de la précision.
@+
Hors ligne
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