ich benutze dafür ein kurzes perl-script:
Code:
#!/usr/bin/perl -w
use DBI;
$dbcstring="DBI:mysql";
$dbname="hl"; #std-db
$dbuser="<dbuser>"; #dbusername
$dbpasswd="<dbpassword>"; #passwd
$table="default";
$sql="default";
foreach(@ARGV) {
$arg=$_;
if ($arg=~/db=/) {
@elm=split("=",$arg);
$dbname=$elm[1];
}
if ($arg=~/tbl=/) {
@elm=split("=",$arg);
$table=$elm[1];
}
if ($arg=~/sql=/) {
@elm=split("=",$arg);
$sql=$elm[1];
}
}
mkconnect();
if ($sql eq "default") { $sql="select * from $table";}
my $sth=$dbh->prepare($sql);
die "Prepare-Fehler: $DBI::errstr\n" if $DBI::err;
$sth->execute();
die "Execute-Fehler: $DBI::errstr\n" if $DBI::err;
while(@fields = $sth->fetchrow_array()) {
for (my $i=0 ;$i<@fields;$i++) {$fields[$i]=~ s/\;//g;$fields[$i]=~ s/\s{3,}//g;$fields[$i]=~ s/\n/ /g ;}
my $bcpln= substr(join(";",@fields),0,254);
print $bcpln."\r\n";
}
$sth->finish();
mkdisconnect();
#***************Datenbankfunktionen********************************
sub mkconnect {
$dbh=DBI->connect($dbcstring.":".$dbname,$dbuser,$dbpasswd);
die "Fehler $DBI::errstr\n" unless $dbh;
}
#*******************************************************************
sub mkdisconnect {
$dbh->disconnect();
die "Fehler $DBI::errstr\n" unless $dbh;
}
#*******************************************************************
das ding liefert mir eine datei in der alle felder der abfrage mit ";" getrennt drinstehen. das ist dann leicht wieder einzulesen
aufruf entweder:
mysql2bcp db=test sql='select * from testtabelle where id<1000'
oder:
mysql2bcp db=jub tbl=testtabelle
kannst ja versuchen, ob es dir was bringt
Lesezeichen