Récupérer plusieurs fois plusieurs morceaux d'une table [PG] - SQL/NoSQL - Programmation
Marsh Posté le 06-11-2007 à 22:40:48
HFR c'est plus ce que c'était
Marsh Posté le 07-11-2007 à 15:48:06
grmpf.
je pars fumer une clope, si je me souvient de ton problème à mon retour, je regarde
Marsh Posté le 07-11-2007 à 16:19:50
Voilà, inspire toi de ce petit test que je viens de faire :
Code :
|
Ici, c'est sous Oracle 10gR2.
Je ne garanti pas que ce soit transposable 100% de façon identique sous PostGreSQL.
Ceci dit, il s'agit uniquement de mots clés SQL-92, donc PostGreSQL respectant très bien cette norme, tu peux avoir bon espoir.
Marsh Posté le 07-11-2007 à 17:46:16
tu peux aussi essayer de te démerder avec la doc de T-SQL, puisque la syntaxe est différente (et là j'ai pas le temps de regarder comment ça marche avec sql server)
http://msdn2.microsoft.com/fr-fr/library/ms189461.aspx
Marsh Posté le 07-11-2007 à 20:14:31
Salut !
Merci d'avoir répondu
Bon, par contre, ça m'aide pas trop, puisque Postgres ne support pas les fonctions sur des fenêtres (le sum(1) OVER (...) )
Ceci dit, je vois un peu comment tu faisais ça, je vais voir si je peux trouver un moyen de faire la même chose sans passer par ces fonctionnalités ...
Marsh Posté le 07-11-2007 à 20:22:43
Ben sinon, tu fais une PS qui te retourne sous forme de table les 10 première villes d'un département. En faisant un inner join dessus à partir des départements, c'est gagné.
Marsh Posté le 07-11-2007 à 20:55:50
Pas bête, c'était presque bon
Code :
|
et :
Code :
|
mais bon, apparement, j'ai pas le droit d'utiliser "t.dep" dans l'appel à la procédure
Marsh Posté le 07-11-2007 à 20:56:36
Bon, ceci dit, ça m'a permis du coup de comprendre comment on pouvait récupérer plusieurs lignes à partir d'un appel à une procédure
Marsh Posté le 08-11-2007 à 00:10:08
c'est exprès la faute de frappe dans la ligne 5 de ta fonction ?
parceque sinon, mise à part limitation praticulière de PG, et syntaxe mise à part (je maîtrise plutôt le T-SQL qui diffère énormément), le principe me semble tout à fait bon.
je vérifierai demain, mais il me semble que j'utilise justement ce système au boulot (pour une toute autre raison) et ça passe sans problème sous sql server. ce serait bien con que ça ne passe pas sous pg
Marsh Posté le 08-11-2007 à 00:22:15
MagicBuzz a écrit : c'est exprès la faute de frappe dans la ligne 5 de ta fonction ? |
oups, en passant les mots clés en majuscule, j'ai oublié un E
MagicBuzz a écrit : parceque sinon, mise à part limitation praticulière de PG, et syntaxe mise à part (je maîtrise plutôt le T-SQL qui diffère énormément), le principe me semble tout à fait bon. |
Bon, après, comme j'ai dis, j'ai découvert tout à l'heure comment utiliser une fonction pour récupérer plusieurs résultats, donc chuis ptêtre pas forcément super au point non plus.
Je poserais la question sur la ML postgresql-user pour voir si quelqu'un connaissant bien Postgres a une meilleure solution.
Merci
Marsh Posté le 08-11-2007 à 11:37:34
Bon, j'ai fait mumuse tout à l'heure, et je me suis rendu compte que... sous SQL Server non plus on peut pas faire de jointure sur une fonction de ce genre... du moins les paramètres attendus ne peuvent pas provenir des autres tables.
Bref.
Voici un script complet qui marche chez moi :
Code :
|
(bon, au début je me prends la tête pour recopier "proprement" une table "INSEE" récupérée sur le net dans deux tables "com" et "dep", n'y prête pas attention )
Marsh Posté le 08-11-2007 à 11:50:54
Ouais, j'avais pensé à faire un truc comme ça au début en fait ...
... sauf que je savais pas retourner plusieurs lignes d'un coup
D'où ma première "solution"
Donc là, ouais, en faisant une boucle sur les départements, puis une requête pour récupérer 10 villes et RETURN NEXT sur le résultat, c'est cool
Marsh Posté le 06-11-2007 à 00:04:06
Salut !
j'ai eu quelques problèmes à résoudre le problème suivant, et j'aurais voulu savoir si vous aviez de meilleurs idées ...
Voilà le problème :
Donc imaginons que j'ai l'équivalent de 90 départements dans ma base, si je veux récupérer les 10 premières villes de chaque département, je dois récupérer 900 couples ville/code_postal.
Question : comment je fais ?
J'ai essayé plusieurs trucs :
... mais bon, à part coller 90 fois ce code, pas terrible non plus.
Là, j'ai réussi à me démerder avec une procédure stockée, qui fait ce copier/coller (en fait). Ça génère une grosse requête, que j'exécute dans un curseur, puis je retourne le curseur et je fais un FETCH ALL dessus .
Ça me semble un peu gorret
Donc voilà, est-ce que vous auriez une meilleure solution ?