Perl-Skript zum exportieren von sql-Abfrage in csv

Den code unten funktioniert, aber alle Daten zeigt, die in einer Reihe(aber unterschiedlichen Spalten) beim öffnen in Excel. Die Abfrage SOLL die Daten anzeigen, die überschriften der Zeile 1 und Zeile 2. Auch, wenn ich die Datei öffnen, ich bekomme eine Warnung, die sagt, dass die Datei, Die Sie versuchen zu öffnen, wird, " xxxx.csv', ist in einem anderen format als spezifiziert durch die Datei-Erweiterung. Stellen Sie sicher, dass die Datei nicht beschädigt ist...usw. Möchten Sie die Datei öffnen?" Trotzdem, dass zu beheben? Das kann die Ursache auch.

tldr; export zu csv mit mehreren Zeilen, nicht nur eines. fix Excel-Fehler. Danke!

#!/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: $!"; 
Nun, zunächst einmal, Sie versuchen zu drucken, die eine array-Referenz in einer Datei umgehen...das wird Ergebnis in Zeilen wie ARRAY(0x323523) usw. Vertrauen Sie nicht Excel. Haben Sie keine Angst, um wirklich zu sehen, den Inhalt einer csv-Datei (über cat, vi, etc).
Auch, Sie haben absolut keine Fehlerkontrolle, deshalb haben Sie keine Möglichkeit zu sagen, ob Sie haben erfolgreich eine Verbindung mit der Datenbank, ob die Tabelle eg.well vorhanden ist, ob die Abfrage erfolgreich durchgeführt wurde, ob keine Zeilen zurückgegeben wurden, etc.
Und darüber hinaus, es sei denn, du bist Codierung einer Wegwerf-one-liner, sollten Sie use strict.
Ok, ich werde sicher sein, das zu tun. In meiner Verteidigung habe ich angefangen zu lernen perl-gestern und habe google um Hilfe haha

InformationsquelleAutor Scuba_Steve | 2012-06-01

Schreibe einen Kommentar