| DBIx-Dump documentation | Contained in the DBIx-Dump distribution. |
DBIx::Dump - Perl extension for dumping database (DBI) data into a variety of formats.
use DBI;
use DBIx::Dump;
my $dbh = DBI->connect("dbi:Oracle:DSN_NAME", "user", "pass", {PrintError => 0, RaiseError => 1});
my $sth = $dbh->prepare("select * from foo");
$sth->execute();
my $exceldb = DBIx::Dump->new('format' => 'excel', 'ouput' => 'db.xls', 'sth' => $sth, EventHandler => \@handler);
$exceldb->dump();
DBIx::Dump allows you to easily dump database data, retrieved using DBI, into a variety of formats including Excel, CSV, etc...
None by default.
Ilya Sterin<lt>isterin@cpan.org<gt>
perl. DBI.
| DBIx-Dump documentation | Contained in the DBIx-Dump distribution. |
package DBIx::Dump; use 5.006; use strict; use warnings; require Exporter; #use AutoLoader qw(AUTOLOAD); our @ISA = qw(Exporter); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. # This allows declaration use DBIx::Dump ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. our %EXPORT_TAGS = ( 'all' => [ qw( ) ] ); our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); our @EXPORT = qw( ); our $VERSION = '0.04'; sub new { my $self = shift; my $attr = {@_}; bless $attr, $self; } ### Must put all anonymous subs before the %formats hash and dump sub. my $excel = sub { my $self = shift; $self->{excelFormat} = undef; require Spreadsheet::WriteExcel; my $workbook = $self->{Generator} || Spreadsheet::WriteExcel->new($self->{output}); $self->{Generator} = $workbook; my $worksheet = $workbook->addworksheet(); my $col = 0; my $row = 0; my $cols = $self->{sth}->{NAME_uc}; foreach my $data (@$cols) { $self->{eventHandler}->($self, \$data, $cols->[$col], 1) if $self->{eventHandler}; $worksheet->write(0, $col, $data, $self->{excelFormat}); $col++; } $row++; $col = 0; while (my @data = $self->{sth}->fetchrow_array()) { foreach my $data (@data) { $self->{eventHandler}->($self, \$data, $cols->[$col], $row+1) if $self->{eventHandler}; $worksheet->write($row, $col, $data, $self->{excelFormat}); $col++; } $col = 0; $row++; } $row = 0; _clean_up($self); }; my $csv = sub { my $self = shift; require Text::CSV_XS; require IO::File; my $fh = IO::File->new("$self->{output}", "w"); my $csvobj = $self->{Generator} || Text::CSV_XS->new({ 'quote_char' => '"', 'escape_char' => '"', 'sep_char' => ',', 'binary' => 0 }); $self->{Generator} = $csvobj; my $cols = $self->{sth}->{NAME_uc}; $csvobj->combine(@$cols); print $fh $csvobj->string(), "\n"; my $row = 0; while (my @data = $self->{sth}->fetchrow_array()) { my $col = 0; foreach my $data (@data) { $self->{eventHandler}->($self, \$data, $cols->[$col], $row+1) if $self->{eventHandler}; $col++; } $csvobj->combine(@data); print $fh $csvobj->string(), "\n"; $row++; } $row = 0; $fh->close(); _clean_up($self); }; #### This is experimental, don't use!!!!! #### my $iQuery = sub { my $self = shift; require IO::File; my $fh = IO::File->new("$self->{output}", "w"); my $stmt = $self->{sth}->{Statement}; $stmt =~ /from\s+(.*)\s+(where|order by|group by)*/i; my @tables; }; ############################################### my %formats = ( 'excel' => $excel, 'csv' => $csv, 'iQuery' => $iQuery ); sub dump { my $self = shift; my $attr = {@_}; $self = {%$self, %$attr}; $formats{$self->{'format'}}->($self); } sub _clean_up { my $self = shift; $self->{Generator} = undef; $self->{excelFormat} = undef; } # Preloaded methods go here. # Autoload methods go after =cut, and are processed by the autosplit program. 1; __END__ # Below is stub documentation for your module. You better edit it!