Script Perl pour l'exportation de requêtes sql vers un fichier csv

Le code ci-dessous fonctionne, mais toutes les données s'affiche dans une ligne(mais différentes colonnes) lorsqu'il est ouvert dans Excel. La requête DOIT afficher les données d'en-têtes de, la ligne 1 et la ligne 2. Aussi, quand j'ouvre le fichier, je reçois un avertissement qui dit que "Le fichier que vous essayez d'ouvrir," xxxx.csv', est dans un format différent de celui spécifié par l'extension de fichier. Vérifiez que le fichier n'est pas corrompu...etc. Voulez-vous ouvrir le fichier maintenant?" De toute façon à résoudre ce problème? Qui peut être la cause de trop.

tldr; exporter au format csv avec plusieurs lignes et non d'un seul. correction d'erreur Excel. Merci!

#!/usr/bin/perl
use warnings;
use DBI;
use Text::CSV;


# local time variables
($sec,$min,$hr,$mday,$mon,$year) = localtime(time);
$mon++;
$year += 1900;

# set name of database to connect to
$database=MDLSDB1;

# connection to the database
my $dbh = DBI->connect("dbi:Oracle:$database", "", "")
or die "Can't make database connect: $DBI::errstr\n";

# some settings that you usually want for oracle 10 
$dbh->{LongReadLen} = 65535; 
$dbh->{PrintError} = 0;  

# sql statement to run
$sql="select * from eg.well where rownum < 3";

my $sth = $dbh->prepare($sql);
$sth->execute();


my $csv = Text::CSV->new ( { binary => 1 } )             
or die "Cannot use CSV: ".Text::CSV->error_diag (); 

open my $fh, ">:raw", "results-$year-$mon-$mday-$hr.$min.$sec.csv"; 

$csv->print($fh, $sth->{NAME});

while(my $row = $sth->fetchrow_arrayref){      

$csv->print($fh, $row);
}

close $fh or die "Failed to write CSV: $!"; 
  • Bien, tout d'abord, vous essayez d'imprimer un tableau de référence à un descripteur de fichier...qui va entraîner des lignes comme ARRAY(0x323523), etc. Ne faites pas confiance à Excel. N'ayez pas peur de vraiment regarder le contenu d'un fichier csv (via cat, vi, etc).
  • Aussi, vous n'avez absolument aucun contrôle d'erreur, vous n'avez donc aucun moyen de dire si vous avez correctement connecté à la base de données, si la table eg.well existe, si la requête a été complété avec succès, que ce soit des lignes nulles ont été retournés, etc.
  • Et en outre, sauf si vous êtes le codage d'un throw-away one-liner, vous devez use strict.
  • Ok je vais être sûr de le faire. Pour ma défense j'ai commencé à apprendre le perl hier et ont utilisé google pour aider haha
InformationsquelleAutor Scuba_Steve | 2012-06-01