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 et MySQL


Sujet :

SGBD Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 8
    Par défaut Perl et MySQL
    Salut tout le monde,

    J'ai un problème assez basique, n'étant pas dévelopeur, je ne comprends pas trop ce qui m'arrrive...

    J'ai un script Perl sur Windows qui va faire un count sur une table MySQL en local. Si le résultat (nombre de lignes comptées) n'est pas égal à 0, il faut supprimer les lignes en questions (même clause where).

    Apparement j'ai un problème, il n'interpète par le résultat du count comme un numérique ou quelque chose dans ce goût là.

    Voici mon code:

    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
     
            $countrowstodelete = $dbh ->prepare("
            SELECT count(*) FROM $_[0]
            WHERE TO_DAYS(NOW()) - TO_DAYS(eventtimestamp) > 120");
            $countrowstodelete->execute;
            while ( ($nbcountrowstodelete) =$countrowstodelete->fetchrow() ) {
            print "Nombre de lignes a supprimer $nbcountrowstodelete !\n" ; } ;  # Affiche le nombre de lignes à supprimer
     
            if ($nbcountrowstodelete ne '0')
                    {
                    $deleterows = $dbh ->prepare("
                    delete from transportlog
                    WHERE TO_DAYS(NOW()) - TO_DAYS($_[1]) > $_[2]");
                    $deleterows->execute;
                    print "Les lignes ont été suprimées.\n";
                    }
            else {
                     print "Aucune ligne a supprimer \n";   # Supprime les lignes si leur nombre est différent de 0
            };
    J'ai le message d'erreur suivant:
    Use of uninitialized value in string ne at mysql_epur_function.pl line 116.

    Merci d'avance pour votre aide !

  2. #2
    Membre chevronné Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Par défaut
    Bonjour,
    1- c'est quoi la ligne 116 ?

    2- En soupconnant que ce soit :
    if ($nbcountrowstodelete ne '0')

    j'ecrirais plutot
    if ($nbcountrowstodelete !=0) # a priori, il s'agit d'un entier.

    3- j'ai du mal a comprendre pourquoi cette variable est utilisée dans un while....

    En esperant que ca te donnera des pistes...

    Sohnic

  3. #3
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    un "my" me semblerait approprié ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ( my $nbcountrowstodelete = $countrowstodelete->fetchrow() ) {
    @+
    Mr6

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 2
    Par défaut
    Voici une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    my $countrowstodelete  = $dbh->prepare ("SELECT count(*) FROM $_[0] WHERE TO_DAYS(NOW()) - TO_DAYS(eventtimestamp) > 120");
    $countrowstodelete ->execute();
    my $nbcountrowstodelete  = $countrowstodelete->fetchrow() ;
    $countrowstodelete->finish();
     
    if ($nbcountrowstodelete > 0){
        print "Nombre de lignes a supprimer $nbcountrowstodelete !\n" ; } ;  # Affiche le nombre de lignes à supprimer
        $deleterows = $dbh ->prepare("delete from transportlog WHERE TO_DAYS(NOW()) - TO_DAYS($_[1]) > $_[2]");
        $deleterows->execute;
     
    } else {
        print "Aucune ligne a supprimer \n";   # Supprime les lignes si leur nombre est différent de 0
    }

    Serge

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 8
    Par défaut Merci
    Excellent, c'est exactement ce que je cherchais, définir la variable avec my et ne pas faire le fetchrow dans une variable résoud le problème.

    Merci encore à tous

Discussions similaires

  1. Perl et Mysql soucis dans foreach
    Par dycobe dans le forum Langage
    Réponses: 5
    Dernier message: 16/05/2007, 15h54
  2. Lancer Scripts Perl sous MySQL 5
    Par hanky dans le forum Installation
    Réponses: 2
    Dernier message: 01/10/2006, 15h26
  3. Réponses: 5
    Dernier message: 07/09/2006, 14h41
  4. perl et Mysql?
    Par frechy dans le forum SGBD
    Réponses: 8
    Dernier message: 21/12/2005, 23h53
  5. Réponses: 1
    Dernier message: 29/11/2005, 22h05

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