in reply to Re^2: Perl oracle insert error handling
in thread Perl oracle insert error handling
You only need to prepare the statements once
poj#!perl use strict; use Text::CSV; use DBD::Oracle; my $csv = Text::CSV->new ( { binary => 1 } ) or die "Cannot use CSV: ".Text::CSV->error_diag (); my $dbh = dbh(); # connect my $SQL1 = "INSERT INTO TAB1 (sample_date, server, first, n1, n2) VALUES (?,?,?,?,?)"; my $sth1 = $dbh->prepare($SQL1); my $SQL2 = "INSERT INTO STATUS (sample_date,server,csv_file,row_count, +status) VALUES (sysdate,?,?,?,?)"; my $sth2 = $dbh->prepare($SQL2); my @csvFile = ('1.csv','2.csv','3.csv'); for my $file (@csvFile){ insertRecords($file); } $dbh->disconnect; sub insertRecords { my $file = shift; print "Working under $file\n"; open my $fh,'<',$file or die "$file : $!"; my $status = "SUCCESS"; my $server; my $rc = 0; while (my $row = $csv->getline ($fh)){ ++$rc; $server = $row->[1]; print join ",",@$row[0..4],"\n"; if ( $sth1->execute(@$row[0..4]) ){ # ok } else { $status = "FAILURE"; last; } }; if ($status eq 'FAILURE'){ $dbh->rollback; $rc = 0; print "ERROR - Rolled back $file\n"; } $sth2->execute($server,$file,$rc,$status); $dbh->commit; close $fh; } # connect sub dbh { my $host = "localhost"; my $sid = 'xe'; my $user = ''; my $pwd = ''; my $dsn = "dbi:Oracle:host=$host;sid=$sid"; my $dbh = DBI->connect($dsn, $user, $pwd, { AutoCommit => 0, }) or die "$!"; return $dbh }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Perl oracle insert error handling
by homer4all (Acolyte) on Dec 23, 2014 at 18:24 UTC |