IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SGBD Perl Discussion :

perl plus requete sql


Sujet :

SGBD Perl

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Points : 36
    Points
    36
    Par défaut perl plus requete sql
    Bonjour,

    J'ai un problème de sortie après ma requête je ne sais pas trop comment faire resortir l'affichage "tableau"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #!D:\perl\bin\perl.exe
    use DBI;
     
    $dbname="base";
    $dbuser="user";
    $dbpass="pass";
     
    my $dbh = DBI->connect("dbi:Oracle:$dbname", $dbuser, $dbpass, {AutoCommit => 0})
              || die "Unale to connect to $dbname: $DBI::errstr\n";
     
     
    open(FILEIN,'<c:\\abaque.txt');
     
    print ("entrez une date au format yyy-mm-jj : \n");
    $DATE = <STDIN>;
     
    $query="MA REQUETE";
     
    $sth = $dbh->prepare($query);
    $sth->execute();
    @ligne = $sth->fetchrow_array;
    print "@ligne\n";
    print FILEIN "@ligne\n";
     
    $sth->finish();
    $dbh->disconnect || warn $dbh->errstr;
    close FILEIN || die "Problème à la fermeture : $!";
    avec ce script j'obtient simplement ma premiere ligne:

    00:00 872

    et j'aimerais obtenir le meme affiche qu'avec ma requete, dans ce style :

    HEURE COUNT(DISTINCTF1.IDSESSION)
    ----- ---------------------------
    00:00 872
    01:00 422
    02:00 246
    03:00 143
    04:00 154

    J'ai donc un problème de sortie avec le tableau, peut etre que je dois utiliser un foreach ?

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Dans ton cas, il te suffit d'utiliser un while() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #!D:\perl\bin\perl.exe
    use DBI;
     
    $dbname="base";
    $dbuser="user";
    $dbpass="pass";
     
    my $dbh = DBI->connect("dbi:Oracle:$dbname", $dbuser, $dbpass, {AutoCommit => 0})
              || die "Unale to connect to $dbname: $DBI::errstr\n";
     
     
    open(FILEIN,'<c:\\abaque.txt');
     
    print ("entrez une date au format yyy-mm-jj : \n");
    $DATE = <STDIN>;
     
    $query="MA REQUETE";
     
    $sth = $dbh->prepare($query);
    $sth->execute();
    while( @ligne = $sth->fetchrow_array() ) {
      print "@ligne\n";
      print FILEIN "@ligne\n";
    }
     
    $sth->finish();
    $dbh->disconnect || warn $dbh->errstr;
    close FILEIN || die "Problème à la fermeture : $!";
    Les fonctions fetchrow_*() comme leur nom l'indique ne récupèrent qu'une seule ligne à la fois, il existe aussi des fonctions fetchall_* qui récupère tous les résultats d'une requête, mais je te conseille de ne les utiliser que si tu y est obligé car tu gaspilles de la mémoire vive ainsi.

    Par ailleurs tu n'utilises ni "strict", ni "warnings"... Tôt ou tard tu t'en mordras les doigts, jette plutôt un coup d'oeil à ce sujet sur le style en Perl.

    --
    Jedaï

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Points : 36
    Points
    36
    Par défaut
    Merci pour ton aide j'arrive bien a recuperer toutes les lignes.
    J'ai ete voir le site que tu m'as laisse j'ai donc commence a ajouter mes variable avec le "my $" mais j'ai un probleme pour certaine variable comme $query $sth et @ligne , je ne sais pas comment les déclarrer.
    J'ai essayé en déclarant comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    my $dbname="WBA";
    my $dbuser="ftm_admin";
    my $dbpass="ftm_admin";
     
    my $query;
    my $sth;
    my @ligne;
    je me demande si il ne faut pas leurs donner des valeurs de base comme "0" ?

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu n'as en général pas besoin de déclarer une variable avant de commencer à l'utiliser, par exemple ici il suffit de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sth = $dbh->prepare($query);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $sth = $dbh->prepare($query);
    Ce n'est pas comme en C, tu n'es pas obligé de déclarer les variables locales en début de bloc.

    Néanmoins méfie-toi de ne pas déclarer tes variables trop tard non plus, en particulier lorsque tu veux utiliser une variable dans une boucle et que tu veux te souvenir de sa valeur d'une itération sur l'autre, il faut la déclarer à l'extérieur de la boucle, sinon elle est réinstantiée à chaque itération et donc sa valeur précédente est oublié (il s'agit en réalité d'une nouvelle variable portant le même nom). Compare :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for (1..10) {
      my $i++;
      print "$i\n";
    } # imprime 1, 10 fois
     
    my $i;
    for (1..10) {
      $i++;
      print "$i\n";
    } # imprime les entiers de 1 à 10
    (undef++ == 1, ici j'ai omis l'initialisation à 0 à dessein, pour mieux illustrer le danger, mais il y a des cas où l'initialisation est réellement faite dans la boucle et où tu devras quand même déclarer la variable à l'extérieur)

    --
    Jedaï

  5. #5
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Bonjour,

    Pour répondre à ta dernière question, il n'est pas non plus utile d'initialiser une variable déclarée. Si tu ne le fais pas, elle vaudra undef (c'est à dire 0 ou "" selon les cas).
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Points : 36
    Points
    36
    Par défaut
    Merci pour votre aide sa m’a pas mal éclaircit sur la programmation perl, et j'commence a apprécier de plus en plus ce language

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/08/2011, 18h10
  2. probleme d'execution de requete sql via perl
    Par juzii dans le forum Windows
    Réponses: 0
    Dernier message: 14/07/2008, 15h53
  3. requete SQL dans script Perl
    Par parisien91 dans le forum SGBD
    Réponses: 2
    Dernier message: 27/05/2008, 15h11
  4. requete sql vba aide récuperer le plus grand
    Par alexkickstand dans le forum VBA Access
    Réponses: 8
    Dernier message: 30/10/2007, 16h13
  5. SQL*PLUS requete de plus de 40000 caractères
    Par Pierre-Jean dans le forum Oracle
    Réponses: 6
    Dernier message: 25/09/2006, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo