使用Perl DBI获取所有记录

使用Perl DBI获取所有记录,第1张

概述我有一个使用 DBI连接的Perl脚本.我使用子例程打开并读取SQL脚本文件.我只打印一条记录,我应该再打印两条记录(总共三条记录).我如何获得所有记录? 结果: Alert:OUTBOUND_DATA:0 脚本: my $dbh_oracle = DBI->connect( $CFG{oracle_dbi_connect}, $CFG{db_user}, 我有一个使用 DBI连接的Perl脚本.我使用子例程打开并读取sql脚本文件.我只打印一条记录,我应该再打印两条记录(总共三条记录).我如何获得所有记录?

结果:

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         0MSGS_BY_DIM                  0INBOUND_DATA         03 rows selected.
解决方法 它还取决于您构建整个脚本的方式.您的get_data()调用仅允许返回一对值.我看到至少有两个选项:要么返回包含所有数据的哈希(引用)并让main组装它,要么使用前面提到的循环结构并在子例程中构造消息体,只返回一个标量字符串.

要将所有数据作为哈希引用返回,get_data子例程可能如下所示(注意我使用fetchall_hashref而不是fetchrow_hashref:

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 $hash_ref = $sth->fetchall_hashref('MYtable');  $sth->finish;  return $hash_ref;}

你从main调用它并使用输出如下:

my $hash_ref = get_data();my $message = "";foreach my $table (sort keys %$hash_ref) {    $message .= join(":","Alert",$table,$$hash_ref{$table}{'FLAG'}) . "\n";}

这将导致$message包含:

Alert:INBOUND_DATA:0Alert:MSGS_BY_DIM:0Alert:OUTBOUND_DATA:0

你可能想要礼貌地:

$dbh_oracle->disconnect;

在你退出之前.

这有一些问题,例如你已经在外部脚本中保存了sql,但是我已经使用了硬编码密钥(MYtable,我认为在你的查询中是唯一的)和值(FLAG)脚本,当你想要扩展它时,这将限制.

总结

以上是内存溢出为你收集整理的使用Perl DBI获取所有记录全部内容,希望文章能够帮你解决使用Perl DBI获取所有记录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1222702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存