Hi,
bin using DBI for a while for data warehousing type stuff and up till now I've had to 
change data on the fly as it moves from one database to another : 

my $sql01 = qq{SELECT FIELD01 .....FIELDn FROM PRODUCTION_TABLE};
my $sql02 = qq{INSERT INTO ACC_LEDG VALUES (?,?,?............);
my $sth = $dbh->prepare($sql01);
$sth->execute;
while (my @row = $sth->fetchrow) {  $data1 = $row[0];   $data2 = $row[1]; 
.............. and so on

But now I just want to copy one table into an exact replica and to save on coding I 
want to avoid having to reference each DB column and the contents of it per row. 
Here's what I've got so far, the SELECT is working and I know pushing onto seperate 
arrays is wrong (gives HASH(0x820c324) etc. with print print "@rows";) but I'm stuck 
on how to take it further. 

#!/usr/bin/perl
use DBI;use DBD::Oracle;
$dbh01 = DBI->connect("dbi:Oracle:PROD_DB", "user", "pwrd");
$dbh02 = DBI->connect("dbi:Oracle:DATA__WAREHOUSE", "usr", "pwrd");
my $sth01 = $dbh->prepare(<<SQL);
SELECT * FROM TRANSACTIONS
SQL

$sth01->execute();
while( my $row = $sth01->fetchrow_hashref) {
        foreach my $col (keys %{$row} ) {
                print "$col = $row->{$col}\n";
                push(@cols,$col);
                push(@rows,$row);
        }
}

my $fields = join(', ', @cols);
my $values = join(', ', @rows);
$sql02 = qq{"INSERT INTO JDE.TRANSACTIONS2 ($cols) VALUES ($rows)"};
$sth02 = $dbh02->prepare($sql02) or die "Can't prepare SQL statement: $DBI::errstr\n";
$sth02->execute();

Reply via email to