我有一個使用DBI連接的Perl腳本。我打開並使用子例程讀取SQL腳本文件。我打印的只有一條記錄,我應該有兩條記錄(共三條記錄)。我如何獲得所有記錄?使用Perl獲取所有記錄DBI
結果:
Alert:OUTBOUND_DATA:0
腳本:
my $dbh_oracle = DBI->connect(
$CFG{oracle_dbi_connect},
$CFG{db_user},
$CFG{db_cred},
{AutoCommit => 0,
RaiseError => 0,
PrintError => 0}) or die ("Cannot connect to the database: ".$DBI::errstr."\n");
my ($val1, $val2) = get_data();
print "Alert:$val1:$val2\n";
send_email("Alert:$val1:$val2");
sub get_data
{
undef $/;
open (my $QFH, "< /sql/summary.sql") or die "error can't open this file $!";
my $sth= $dbh_oracle->prepare(<$QFH>) or
die ("Cannot connect to the database: ".$DBI::errstr."\n");
$sth->execute;
close $QFH;
my $row = $sth->fetchrow_hashref;
$sth->finish;
return @$row{'MYTABLE','FLAG'};
}
sub send_email {
my $message = shift;
open (MAIL, "|/usr/sbin/sendmail -t") or die "Can't open sendmail: $!";
print MAIL "To: me\@test.com\n";
print MAIL "From: Data\n";
print MAIL "\n";
print MAIL $message;
close MAIL;
}
exit;
從運行的查詢結果:(超過1個REC)
MYTABLE FLAG
----------------------- ----------
OUTBOUND_DATA 0
MSGS_BY_DIM 0
INBOUND_DATA 0
3 rows selected.
您可以設置'RAISEERROR => 1',且無需爲那些死()調用。 – pilcrow 2012-04-21 00:21:03
另外,我注意到你已經禁用了'RaiseError'和'PrintError'。第一個錯誤是致命的,第二個錯誤至少會打印出來(但不會殺死你的代碼)。您應該至少將其中的一個設置爲真實值,以免您的錯誤被丟棄。 – Ovid 2012-05-04 13:32:35