|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() R&D en systemes informatiques bas niveau Unix/Linux Inscription : mai 2004 Messages : 7 168 ![]() |
Bonjour,
J'ai une requete qui est de la forme suivante (dans du code C, mais ce n'est pas ca qui me pose probleme) : Code C :
Ma question est la suivante : je cherche a connaitre le nombre de resultats de la requete, sans pour autant faire un "count (*)", ni en comptant le nombre de passages dans le while. Ca peut etre au niveau de l'open, du fetch, ... ca n'a pas d'importance pour moi. En gros, je voudrais etre capable de limiter le nombre de resultats de la requete, mais aussi savoir s'il y en avait plus en base ou non. Si je ne suis pas clair, n'hesitez pas demander des explications, je sais que je n'ai pas tres bien explique. |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 868 ![]() |
Pour connaître dès la première ligne retournée par ton curseur le nombre de lignes total, il y a un moyen simple... le retourner dans toutes les lignes.
Code :
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
|
||
|
|
10
|
|
|
#3 |
![]() ![]() R&D en systemes informatiques bas niveau Unix/Linux Inscription : mai 2004 Messages : 7 168 ![]() |
Bonjour,
Merci pour cette reponse, qui permet effectivement de faire ce que je veux. Neanmoins, j'avoue que je pensais qu'il y avait mecanisme moins... plus... enfin... Disons un truc plus "pro" qui fasse moins "bidouille" :-) C'est pas que la solution ne fonctionne pas hein, mais bon... |
|
|
11
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 4 104 ![]() |
Citation:
Mais oui, sans compter il n’est pas possible de savoir combien il y en a ! Et traiter les fonctions analytiques de "bidouillage" c’est juste montrer ne pas savoir de quoi on parle. |
|
|
|
00
|
|
|
#5 | ||
![]() ![]() R&D en systemes informatiques bas niveau Unix/Linux Inscription : mai 2004 Messages : 7 168 ![]() |
Citation:
Citation:
Ajouter le nombre d'entrees total a chaque ligne est bien un bidouillage a mon sens, independamment de la fonction qui permet d'obtenir ce nombre -qui elle n'est pas du bidouillage, je suis bien d'accord. |
||
|
|
00
|
|
|
#6 | |
![]() ![]() |
Citation:
Tant qu'il n'est pas à la fin, il ne sait pas combien de lignes il va lire.
__________________
Email : http://scr.im/waldar |
|
|
00
|
|
|
#7 |
![]() ![]() R&D en systemes informatiques bas niveau Unix/Linux Inscription : mai 2004 Messages : 7 168 ![]() |
Mea culpa : je ne connais pas le mecanisme des curseurs, et je ne pensais pas que c'etait parcouru au fur et a mesure.
|
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 4 104 ![]() |
Soit vous le faite par une requête de pagination donc vous savez combien des enregistrements peuvent exister au maximum dans le résultat (ce qui n’est pas toujours égale au nombre des enregistrements réellement ramènes parce que rien ne garanti que la dernière page contient ce nombre) soit vous faite une requête normale pour lequel Oracle ne compte jamais le nombre des enregistrements d’avance !
Il est vrai qu’il les compte mais, seulement au fur et au mesure de vos instructions fetch ! Donc après chaque fetch vous pouvez récupérer le nombre cumulativ des enregistrements ramenés jusqu’à ce moment. Mais vous ne pouvez pas savoir, sans faire un autre fetch combien il y en reste ! Ca marche comme ça ! Pour connaître le nombre des enregistrements qui peuvent être ramenés par une requête il faut les compter. Soit vous faite ce comptage dans une requête à part et en principe, ça pose un problème de cohérence entre le résultat obtenu par la fonction du comptage et le résultat réel, soit vous le faite via la fonction analytique comme montre dans l’exemple. Par rapport à votre demande initiale : peut être que vous voulez ramener au maximum disons 100 lignes et annoncer avec un message que des autres lignes existent mais qui n’ont été pas prises en compte. Si votre besoin est celui ci alors vous pouvez l’accomplir en récupérant le nombre des enregistrements actuellement ramènes et si vous atteigniez le seuil faire un fetch de plus pour savoir si il y en a encore. Mais sans savoir combien! |
|
|
00
|
|
|
#9 |
![]() ![]() R&D en systemes informatiques bas niveau Unix/Linux Inscription : mai 2004 Messages : 7 168 ![]() |
Merci pour toutes ces explications.
Ce que je dois faire correspond bien a ce qui a ete decrit : ramener un certain nombre d'enregistrements, tout en sachant combien il y en avait qui correspondent a la requete. La premiere solution correspond bien a ce que je fais, donc hop, vendu ! Merci a tous ceux qui ont pris le temps de m'expliquer. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com