in reply to Counting number of rows while working with Oracle
As discussed in the CB, databases tend to not tell the client how many rows they will return. The only way for the client to know how many rows will be returned is to count them as they're being read in.
The simplest solution would to read all the rows into memory before starting to process them. For example, replace
while (my $row = $sth->fetch_arrayref()) { ... }
with
my $rows = $sth->fetchall_arrayref(); my $num_rows = @$rows; foreach my $row (@$rows) { ... }
If you need a DBI interface, then you can replace the code with
my $rows = $sth->fetchall_arrayref(); my $num_rows = @$rows; my $sponge = DBI->connect('dbi:Sponge:'); my $sponge_sth = $sponge->prepare( $sth->{Statement}, { rows => $rows, NAME => $sth->{NAME}, behave_like => $sth, } ); while (my $row = $sponge_sth->fetch_arrayref()) { ... }
It's too bad that DBD::Sponge doesn't override rows.
|
---|