是否有人使用DBI模块逐行读取数据库表?该表非常庞大,如果我尝试选择,我会一直耗尽内存。我正在使用oracle数据库
答案 0 :(得分:2)
问题出在您的查询中。你必须限制你的结果集。
正如DavidO所说,LIMIT是一个解决方案。
my $sth = $dbh->prepare("SELECT whatever FROM wherever LIMIT 50");
$sth->execute;
my $row;
while (my @data = $sth->fetchrow_array) {
print "my $row(@row)";
sleep(1);
}
$sth->finish;
$dbh->disconnect;
答案 1 :(得分:1)
许多数据库在SQL中支持“LIMIT”子句。或者,您可以使用WHERE子句给定一系列主键,以约束每个查询返回的数据量。
答案 2 :(得分:1)
是。如果您不想立即获得 all 结果,请使用其名称中没有 all 的DBI函数来获取它们。如,
my $sth = $dbh->prepare("SELECT whatever FROM wherever");
$sth->execute;
while (my @data = $sth->fetchrow_array) { # returns just one row
# do stuff with @data
}