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 :

script perl avec oracle


Sujet :

SGBD Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2009
    Messages : 43
    Points : 29
    Points
    29
    Par défaut script perl avec oracle
    bonjour

    Je découvre tout juste le perl, il faudrait que ja fasse un script qui se connecte à une bdd oracle pour récupérer des infos et les stocker dans un fichier
    voila ce que j'ai déjà écris.

    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
    30
    31
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    #Connexion à la BDD
    my $dbh = DBI->connect("dbi:Oracle:nom_base", 'utilisateur', 'mdp') or die ("Connection impossible à la base de donnees)";
     
     
    #Début de la requête
    my $requeteEvents = 
    select * 
    from jrnl_event where to_char(DT_SYST,'ddmmyy hhmm')>concat(to_char(sysdate-1,'ddmmyy'),' 0530') and (id_type_event='ARF' or id_type_event='ARRET') and (id_ress like 'PK%');
     
    my $requeteEvents = $dbh->prepare($requeteEvents)
     
    $requeteEvents->execute || die "Problème de sélection : $DBI::errstr";
    while (my ($champ1, $champ2, ...) = $requeteEvents->fetchrow_array) {
    print "Contenu: $champ1, $champ2, ... \n";
    }
     
    # On ferme la requête select
    $requeteEvents->finish; 
     
    #Création d'un nouveau fichier
    open FILE, '>pannes.xls' or die "pannes.xls : $!\n";
     
    #Fermeture du fichier
    close FILE;                 
     
    # Déconnexion de la BDD
    $dbh->disconnect;
    Donc j'ai testé la requete sur sql plus, elle fonctionne donc reste plus qu'a affecter le résulat de la requête dans un fichier.

    Je voudrais savoir si déjà le sript est bon, et comment exporter le résultat de ma requête dans un fichier (dans le script j'ai juste créé le fichier pannes.xls)

    Merci de m'aider

  2. #2
    Mr6
    Mr6 est déconnecté
    Membre éclairé

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

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    Salut !

    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 $file = 'mon_fichier_a_moi';
    #Création d'un nouveau fichier
    open FILE, ">".$file or die "$file : $!\n";
     
    while (my ($champ1, $champ2, ...) = $requeteEvents->fetchrow_array) {
    print FILE "Contenu: $champ1, $champ2, ... \n";
    }
     
    #Fermeture du fichier
    close FILE;  
     
    # On ferme la requête select
    $requeteEvents->finish;
    Perso je te suggère de générer un .csv, comme ca tu mets ton délimiteur et Excel fera le tri

    @+
    Mr6

    PS : la question ne portait que sur la génération du fichier ? ton post irait mieux coté langage la prochaine fois, ici c'est SGBD, donc on s'attend plutot à des questions type usage de DBI

  3. #3
    Mr6
    Mr6 est déconnecté
    Membre éclairé

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

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    J'avais pas fait attention à la portion "si le script est bon"

    Du coup il te faut un "use DBI;" en début de script (ah ben tiens, mon PS de tt à l'heure part à la poubelle), et peut-être vérifier si tu dois pas appeler aussi un truc style "use DBD::Oracle;".

    Ta requête doit être mise entre quotes pour être assignée à ta variable, et il te manque un point-virgule à la fin de ta ligne "prepare".
    Voili-voilou !

    @+
    Mr6

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2009
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Salut!

    Merci pour tes réponses!
    Voila mon code modifié:

    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
    30
    31
    32
    33
    34
    35
    36
    #!/usr/bin/perl
    use strict;
    use warnings;
    use DBI;
     
    #Connexion à la BDD
    my $dbh = DBI->connect("dbi:Oracle:producim", 'dept_85', 'dept_85') or die ("Connection impossible à la base de donnees)";
     
    #Début de la requête
    my $requeteEvents = 
    	select count (id_type_event) 
    	from jrnl_event where to_char(DT_SYST,'ddmmyy hhmm')>concat(to_char(sysdate-7,'ddmmyy'),' 0530') 
    	and (id_type_event='ARF' or id_type_event='ARRET')
     
    my $requeteEvents = $dbh->prepare($requeteEvents)
     
    $requeteEvents->execute || die "Problème de sélection : $DBI::errstr";
    while (my ($champ1, $champ2, ...) = $requeteEvents->fetchrow_array) {
    print "Contenu: $champ1, $champ2, ... \n";
    }
    my $file = 'export.csv';
    #Création d'un nouveau fichier
    open FILE, ">".$file or die "$file : $!\n";
     
    while (my ($champ1, $champ2, ...) = $requeteEvents->fetchrow_array) {
    print FILE "Contenu: $champ1, $champ2, ... \n";
    }
     
    #Fermeture du fichier
    close FILE;  
     
    # On ferme la requête select
    $requeteEvents->finish;             
     
    # Déconnexion de la BDD
    $dbh->disconnect;
    Autre question: j'aimerai faire 2 reqêtes à stocker dans mon fichier, comment faire?

    Perso je te suggère de générer un .csv, comme ca tu mets ton délimiteur et Excel fera le tri
    comment excel fait le tri?

    Merci pour ton aide

  5. #5
    Mr6
    Mr6 est déconnecté
    Membre éclairé

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

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #Début de la requête
    my $requeteEvents ="select count (id_type_event) from jrnl_event where to_char(DT_SYST,\'ddmmyy hhmm\')>concat(to_char(sysdate-7,\'ddmmyy\'),\'0530\') and (id_type_event=\'ARF\' or id_type_event=\'ARRET\')";
        
    my $requeteEvents = $dbh->prepare($requeteEvents);
    2 requetes ? Ben 2 fois ton code ?
    Ou alors tu te fais une petite fonction qui attend ta requete en entrée et qui te renvoie directement ton résultat, que tu as juste à imprimer.
    Style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    my @liste_de_listes = oracle_req($requeteEvents);
     
    sub oracle_req {
         my $req = "@_";
         my $sth = $dbh->prepare($req);
         $sth->execute || die "Problème de sélection : $DBI::errstr";
         my @result_list;
         while (my ($champ1, $champ2, ...) = $requeteEvents->fetchrow_array) {
             push @result_list, [$champ1,$champ2,...];
         }
         return @result_list;
    }
    A tester et corriger bien sûr, c'est juste pour te donner une idée car ca fait trop longtemps que j'ai pas joué avec DBI...

    Pour Excel (ou calc d'ailleurs, ca doit marcher pareil), je te conseille de constater par toi-même : tu te fais un fichier texte, avec chaque élément séparé par un ; et tu l'enregistres en CSV. Tu verras ce qu'il te dira quand tu voudras l'ouvrir avec (faut être curieux de temps en temps )
    Après si tu veux générer un fichier XLS il y a un module pour ca (ca me dit qqch cette expression... pourquoi ca sent la pomme dans le coin ? )

    @+
    Mr6
    *trop dur le lundi !*

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

Discussions similaires

  1. Problème script perl avec STDIN
    Par deimosfr dans le forum Langage
    Réponses: 2
    Dernier message: 23/07/2009, 10h22
  2. Appel script Perl avec arguments
    Par metalcoyote dans le forum Général Java
    Réponses: 5
    Dernier message: 12/06/2008, 16h33
  3. Substituer sqlplus par un script perl DBD::Oracle
    Par Konrad Florczak dans le forum SGBD
    Réponses: 2
    Dernier message: 19/01/2007, 14h50
  4. [Système] Lancer un script perl avec PHP
    Par pepite dans le forum Langage
    Réponses: 2
    Dernier message: 09/01/2006, 12h30
  5. Réponses: 6
    Dernier message: 23/05/2005, 08h33

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