次のコードは、単一のカウント値を取得するには多すぎるようです。プレーンDBIを使用して単一のCOUNT値をフェッチするためのより良い推奨される方法はありますか?
sub get_count {
my $sth = $dbh->prepare("SELECT COUNT(*) FROM table WHERE...");
$sth->execute( @params );
my $($count) = $sth->fetchrow_array;
$sth->finish;
return $count;
}
これは短いですが、まだ2つのステートメントがあります。
sub get_count_2 {
my $ar = $dbh->selectall_arrayref("SELECT ...", undef, @params)
return $ar->[0][0];
}
追加の変数なしで1行で実行するのに十分簡単です:
$count = $dbh->selectrow_array('SELECT count(*) FROM table WHERE...', undef, @params);
私はPerlを知りませんが、構文が論理的である場合、これは2番目の例に基づいて機能すると思います。
sub get_count {
return $dbh->selectall_arrayref("SELECT ...", undef, @params)->[0][0];
}
私はおそらくこれを自分で行うことはありませんが、使用しているDBHオブジェクトの新しいトップレベル関数にすることができます。
警告:テストされていないコードが続きます!
sub DBD::SQLite::db::count
{
my($dbh, $table, $where) = @_;
my($stmt) = "SELECT COUNT(*) FROM $table";
$stmt .= " WHERE $where" if $where;
my($count) = $dbh->selectrow_array($stmt);
return $count;
}
そしてそれをこのように呼びます:
my($cnt) = $dbh->count('Employee', 'year_hired < 2000');
自分のものではない名前空間を汚染するだけでなく、使用するすべてのDBドライバーに対してこれを作成する必要がありますが、特定のコードを構築および評価して、特定の名前空間に対してこれを自動構成できるようにすることができると確信しています。 DBHオブジェクト。