http://www.perlmonks.org?node_id=788323


in reply to sqlconnection question

This depends on your code.

Show us a simplified example of what you are doing.

If you use one of the combined functions of DBI, like fetchall_arrayref, the data will persist.

On the other hand, if you loop over the results using prepare, execute, fetch, you cannot close the connection, as this will drop your statement handle.

Replies are listed 'Best First'.
Re^2: sqlconnection question
by grashoper (Monk) on Aug 13, 2009 at 17:16 UTC
    Thanks, I see its not using combined functions so I guess the only option would be to do a re-write of most of it.
      Why do you want to close the connection anyway?

      There should be no problem with something like:

      sth1 = prepare select sth1->execute sth2 = prepare select sth2->execute sth3 = prepare insert while () { sth1->fetch sth2->fetch sth3->execute } sth1->finish sth2->finish sth3->finish
      Unless your database prevents having multiple statements at the same time.

      Hang on a minute - you may be rushing to change something you do not need to. The point being made is that if you open a cursor on a result-set, don't retrieve the whole result-set then close the connection you have not got all of the result-set you queried in the first place. So long as you retrieve the result-set via combined DBI functions or otherwise, then closing the connection should not matter. Of course this depends on where you store the results and whether the variables you store the results in go out of scope and are destroyed but the basic principle is go need to retrieve the result-set before closing the connection.