Forum Clubic

[PERL] Résultat d'un requête SQL bizarre

Bonjour à tous,
Voilà j’ai un souci qui me bloque et qui commence à me saouler.
Je vous donne tout de suite le petit bout de code qui m’ennuie.
N.B.: $RequeteFound=“SELECT QUANTITE FROM article”;
(Il y a 49550 enregistrtements de quantités dans la table article)
[cpp]
my $req=$dbi->prepare($RequeteFound);
my $res=$req->execute;
print “$res\n”;
while ($Data[$j]=$req->fetchrow_array())
{
$j++;
}
print “nb enregistrement: $#Data\n”;
$req->finish;
[/cpp]

Figurez vous que mon $res retourne le nombre 49550 (c parfait.)
Mais lorsque je mets mes résultats d’enregistrement dans le tableau Data (avec while $Data[$j]=$req->fetchrow_array()), et que j’affiche la longueur du tableau @Data (print “nb enregistrement: $#Data\n”;), j’obtiens une longueur de 195 ???
Comment faire ? Qu’est ce que je n’ai pas compris.
Merci pour votre aide !!!

Sans être spécialiste du PERL, $j vaut quoi au début?

Je ne connais pas trop le Perl, mais a priori tu utilises la commande fetchrow_array(). En SQL, FETCH récupère des lignes en utilisant un curseur déjà existant. Donc ici, tu dois avoir un curseur de taille 195. Pour voir les autres, tu dois déplacer ton curseur (fonction NEXT peut-être), ou alors parametrer ta requête en fetch_all.

Voilà, les autres aidez moi si ce que je raconte n’est pas très clair. Je comprends parfaitement ton problème mais j’ai du mal à l’expliquer…

Pour Sans-Nom: pardon, j’ai couper mon code comme un sagouin (j’avais déclaré un my $j plus haut).

Pour Nicolas.pons: Je vais tenté un fetch-all() mais je comprends pas pourquoi ça marche pas parce que mon $res vaut bien 49550.

Sinon, j’en profite pour poser une petite question d’inculte:
Si je fais une requête et que j’ai 1 million de résultats, comment sont récupérés les résultats (dans un tableau de 1 million de valeurs ?). Surement pas. Alors la requete mais elle un indice devant chaque résultat, indice qui sera utilisé par la fonction fetch_array ? C surement une question de débutant mais j’aimerai comprendre.

En général tu raméne pas tous les jours 1 million de résultats, au moins parce que quelque part ça coincera… :o

bon alors un peu moins ;o) ?

Pareil. Vaut mieux toujours rajouter un LIMIT 50 dans ta requête, ou n’importe quoi susceptible de limiter le nombre de résultats renvoyés.

Parce que les résultats sont récupérés dans un tableau et sont donc chargés en mémoire ?
Donc si mes résultats sont “codés” sur 100 octets (char 40 par ex) et que j’ai 1000 résultats, j’aurais 100*1000 octets chargé dans ma ram ? Eclaire ma petite lanterne.