Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
830 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl ] Comportement étrange avec DBI

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl ] Comportement étrange avec DBI

n°2244014
Titprem
Posté le 26-11-2014 à 11:49:15  profilanswer
 

:hello:
 
J'ai un comportement étrange avec le script (objet) ci-dessous qui utilise DBI (avec postrgres). Je cherche à insérer dans une table le contenu d'un fichier CSV :
 

Code :
  1. sub insertion {
  2.     my ($this, $dbh) = @_;
  3.     my $fichier = "toto.csv";
  4.     my $sql = "COPY toto (col1, col2, col3) FROM '$fichier' WITH DELIMITER ';' NULL '';";
  5. #print qx(cat $fichier);
  6.     $dbh->do($sql);
  7. }


 
Lorsque je commente le print, ma table reste vide, et lorsque je le décommente, l'insertion dans ma table se fait bien !
 
Je ne comprends absolument pas la raison de ce fonctionnement... Une idée ? :??:
 
édit : version perl 5.10


Message édité par Titprem le 26-11-2014 à 12:29:05
mood
Publicité
Posté le 26-11-2014 à 11:49:15  profilanswer
 

n°2244055
gilou
Modérateur
Modzilla
Posté le 26-11-2014 à 14:33:02  profilanswer
 

C'est peut être un bug.
 
Par contre, le ; a la fin de ton statement SQL, c'est normal?
J'aurais pensé que

Code :
  1. my $sql = "COPY toto (col1, col2, col3) FROM '$fichier' WITH DELIMITER ';' NULL ''";
  2. ou
  3. my $sql = qq{COPY toto (col1, col2, col3) FROM '$fichier' WITH DELIMITER ';' NULL ''};


convenait.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2244073
Titprem
Posté le 26-11-2014 à 15:21:52  profilanswer
 

Oui, on peut s'en passer.
 
Sinon, ça marche aussi en remplaçant le print par un simple :

Code :
  1. qx(echo 'toto');


Et ça ne fonctionne plus si je commente le qx...

n°2244090
gilou
Modérateur
Modzilla
Posté le 26-11-2014 à 16:15:48  profilanswer
 

Et si tu fais un  
$dbh->do($sql) or die $dbh->errstr;
tu as un message d'erreur?
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2244099
Titprem
Posté le 26-11-2014 à 16:47:02  profilanswer
 

J'aurais pu le préciser, mais quel que soit le résultat (insertion ou non dans la table), la requête me retourne une valeur nulle mais vraie ('0E0'). Donc je n'ai pas de die.
 
J'ai fait un tracelog :

Code :
  1. DBI->trace(5, 'dbi.log');

et j'obtiens la même trace dans les deux cas (à une réfence de hash près et un threadid près).
 
C'est incompréhensible...


Message édité par Titprem le 26-11-2014 à 16:53:07
n°2244106
Titprem
Posté le 26-11-2014 à 17:42:12  profilanswer
 

J'ai fini par trouver, je pense, l'explication au phénomène : en fait, le fichier que je cherche à insérer étant petit, il n'est pas encore écrit sur le disque, mais juste stocké dans son buffer.
 
Donc lorsque je fais mon COPY, il prend un fichier... vide ! Donc il n'écrit logiquement rien dans la base !
 
Mais lorsque je fais appel à l'ordre 'qx', visiblement, ça entraine l'écriture du buffer dans le fichier, et donc l'insertion est alors correcte !
 
Et voilà !
 
Merci à gillou d'avoir pris le temps de se pencher sur mon problème. :jap:

n°2244107
Titprem
Posté le 26-11-2014 à 17:44:16  profilanswer
 

J'ai néanmoins un autre problème du coup, puisque je ferme bien mes fichiers avant de (tenter de) les copier...
 
Je ne comprends pas pourquoi il ne sont pas écrit sur disque au moment du close... :??:
 
édit : réponse : tout simplement parce que je ne les fermais pas correctement ! :D
 
Problème résolu ! :o


Message édité par Titprem le 26-11-2014 à 17:55:12
n°2244164
gilou
Modérateur
Modzilla
Posté le 27-11-2014 à 00:06:19  profilanswer
 

Ah! Donc c'était pas au niveau de DBI, mais au niveau de l'existence du fichier que tu passais en paramètres.
Sans plus d'infos contextuelle, je risquais pas de m'en douter.
Heureux de voir que c'est rentré dans l'ordre.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Perl ] Comportement étrange avec DBI

 

Sujets relatifs
Créer un exécutable à partir d'un script Perlhelp programmation perl
[RESOLU][PERL] Extraire chaines multiples dans une fichierconfiguer perl sur wamp
Requête SQL basée sur paramètre et table un peu étrangeperl + xml::treebuilder
Faire un include d'un drive en perlTrès étrange problème de sheets.select
[perl]Aide pour l'installation d'un logiciel permettant le perl (noob) 
Plus de sujets relatifs à : [Perl ] Comportement étrange avec DBI


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR