Bruce, With my version of Oracle and its DBD, both work (i.e., just re-opening the cursor, or first issuing a "finish"):
$query = 'SELECT * FROM my_table'; $csr = $dbh->prepare($query); $csr->execute(); # Just print two of the 24 rows: @row = $csr->fetchrow_array(); print (join ',',@row) . "\n"; # prints the first row @row = $csr->fetchrow_array(); print (join ',',@row) . "\n"; # prints the second row # Now re-execute the query and fetch again: $csr->execute(); @row = $csr->fetchrow_array(); print (join ',',@row) . "\n"; # prints the first row # Now close the query and fetch again: $csr->finish(); $csr->execute(); @row = $csr->fetchrow_array(); print (join ',',@row) . "\n"; # prints the first row 8< ------------------- So the latter is the "correct" way to do it. No need to recreate the handle, though: the "prepare" is still valid, just re-execute it. But as I said, not closing the cursor might or might not work, depending on the (version of the) server. -- Peter Vanroose. On Jul 01, 2012, at 05:13 AM, john...@pharmacy.arizona.edu wrote: > On Jun 30, 2012, at 3:57 PM, pe...@vanroose.be wrote: > >> I guess it depends on the RDBMS server. >> I would expect an implicit close, but I can imagine that the documentation >> states that it's unpredictable behaviour. > > > Looking at the DBD oracle docs I find: > > finish > > $rv = $sth->finish; > Indicates to DBI that you are finished with the statement handle and are not > going to use it again. Only needed when you have not fetched all the possible > rows. > > > Does this mean I have to recreate the handle $sth to reuse it? > > -- > Bruce Johnson