如何将SQL查询输入文件传递给perl dbi子例程



我喜欢创建一个通用的perl脚本,它将从一个单独的文件输入sql查询,并将其与perl dbi(子例程)一起使用,而不是硬编码语句。有人能给我举个例子吗?

例如,我在子例程中有这样一个:

sub get_val
{
  my $sth = $dbh->prepare(q{SELECT count(*) AS COUNT FROM TEST1) ||
      die ("Can't connect: ".$DBI::errstr."n");         
  $sth->execute;
  my $row = $sth->fetchrow_hashref;
  $sth->finish;
  return $row->{COUNT};
}

大致的思路是:

$/ = ';';
open FH, "< file.sql";
while (<FH>) {
    $dbh->do($_);
    # or:
    # my $sth = $dbh->prepare($_);
    # $sth->execute();
}
close FH;

当然,这不一定会处理注释,或者引号字符串中的;字符等。但这应该会指引你走向正确的方向。

或者如果你知道文件只包含一条语句:

undef $/;
open FH, "< file.sql";
my $sth = $dbh->prepare(<FH>);
close FH;
$sth->execute();

最新更新