Tester le nombre de retours d'une requête

Tester le nombre de retours d'une requête - Perl - Programmation

Marsh Posté le 13-04-2005 à 10:44:35    

Bonjour,
 
Dans un programme perl, j'aimerais pouvoir tester si une requête me renvoie bien qqchose ou pas (afin de faire 2 traitements différents selon le cas).
 
J'ai testé avec un if ($sth->rows == 0) mais apparemment ça teste le numéro de la ligne, donc c'est toujours vrai la première fois.
 
J'y connais rien en perl et je trouve pas d'exemple sur ce point précis  :(  
 
Merci d'avance :jap:

Reply

Marsh Posté le 13-04-2005 à 10:44:35   

Reply

Marsh Posté le 13-04-2005 à 11:02:18    

Snif j'en étais sûr, personne regarde la cat Perl :sweat:

Reply

Marsh Posté le 13-04-2005 à 11:18:17    

T'utilises quel module pour faire tes requetes ?


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 13-04-2005 à 11:20:31    

Ah quelqu'un :)
 
J'utilise DBI pour mes requêtes vers Oracle.

Reply

Marsh Posté le 13-04-2005 à 11:21:25    

Et la doc de ce module n'a pas résolu ton problème ?


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 13-04-2005 à 11:23:44    

non pas vraiment :/
 
Tiens en essayant ça :  

Code :
  1. if (!defined(my $test = $sth->fetchrow_hashref))


ça a l'air de marcher (en tout cas il me sépare bien les 2 cas).
 
Par contre je risque pas de perdre le premier enregistrement (sachant qu'ensuite j'ai

Code :
  1. else {
  2. while (my $machin = $sth->fetchrow_hashref)
  3. { //traitement }

?


Message édité par zedar le 13-04-2005 à 11:24:10
Reply

Marsh Posté le 13-04-2005 à 11:28:31    

Bah oui, faut tester ton $sth plutot pour savoir combien de lignes il contient


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 13-04-2005 à 11:30:42    

Citation :


rows  
  $rv = $sth->rows;
Returns the number of rows affected by the last row affecting command, or -1 if the number of rows is not known or not available.
 
Generally, you can only rely on a row count after a non-SELECT execute (for some specific operations like UPDATE and DELETE), or after fetching all the rows of a SELECT statement.
 
For SELECT statements, it is generally not possible to know how many rows will be returned except by fetching them all. Some drivers will return the number of rows the application has fetched so far, but others may return -1 until all rows have been fetched. So use of the rows method or $DBI::rows with SELECT statements is not recommended.

One alternative method to get a row count for a SELECT is to execute a "SELECT COUNT(*) FROM ..." SQL statement with the same "..." as your query and then fetch the row count from that.
 


 
ca pue un peu :/


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 13-04-2005 à 11:31:34    

Mais justement, quel argument du sth tester ? :)
 
Je connais pas le perl, je code ça en bloc notes et je suis perdu sans un IDE qui propose tous les arguments quand je tape -> :p)

Reply

Marsh Posté le 13-04-2005 à 11:33:52    

arfeuh :/
 
Je vais me tourner vers une solution un peu crade mais qui marche... du genre

Code :
  1. i=0;
  2. while ($sth->rows) {
  3. ...
  4. i=i+1;
  5. }


et je teste la valeur de i à la fin... c'est bof mais bon...

Reply

Marsh Posté le 13-04-2005 à 11:33:52   

Reply

Marsh Posté le 13-04-2005 à 11:34:26    

zedar a écrit :

Mais justement, quel argument du sth tester ? :)
 
Je connais pas le perl, je code ça en bloc notes et je suis perdu sans un IDE qui propose tous les arguments quand je tape -> :p)


 
Bah d'ou l'utilité de la doc, j'ai fait 1 mois de perl dans ma vie et c'etait pour automatiser des configs de routeur donc on peut pas dire que l'acces à une bdd sous perl ce soit mon super trip [:itm]
 
edit: voire mon autre post plus haut


Message édité par boulax le 13-04-2005 à 11:34:46

---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 13-04-2005 à 11:38:56    

boulax a écrit :

Bah d'ou l'utilité de la doc, j'ai fait 1 mois de perl dans ma vie et c'etait pour automatiser des configs de routeur donc on peut pas dire que l'acces à une bdd sous perl ce soit mon super trip [:itm]
 
edit: voire mon autre post plus haut


 
Hehe je comprends ;)  
 
Merci pour ton aide, je pense utiliser l'algo bof ci-dessus... il pose pas vraiment de problèmes (perf ou autre) donc finalement il me convient.
 
:jap:

Reply

Marsh Posté le 13-04-2005 à 11:41:20    

zedar a écrit :

arfeuh :/
 
Je vais me tourner vers une solution un peu crade mais qui marche... du genre

Code :
  1. i=0;
  2. while ($sth->rows) {
  3. ...
  4. i=i+1;
  5. }


et je teste la valeur de i à la fin... c'est bof mais bon...


 
Ca marchera pas, t'as pas lu l'extrait de doc que j'ai posté ?


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 13-04-2005 à 11:45:44    

Euh tu parles du $sth->rows ?
 
C'est bien sûr un $sth->fetchrow_hashref, au temps(/autant) pour moi. En fait la lecture normale de l'enregistrement (qui marche actuellement). J'insère simplement un compteur d'enregistrements dans ma boucle.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed