Jacob Elder wrote: >On Tue, Apr 09, 2002 at 11:13:09AM +0100, Martin Harriss wrote: > >>I am using Embperl on an intranet system to perform complex database >>searches and display the results. >> >>My problem is that, depending on the parameters given by the user, some >>searches can take some time - returning thousands of rows, and there is a >>danger that the user will hit the stop button, execute the Back command or >>even close the browser session altogether. If this happens at the wrong >>time, an oracle connection could have been made, but no SQL sent to it, >>leaving an Oracle process hanging there. >> >>I need to be able to trap these browser events, and I can then call a >>cleanup routine to close any database connections. I can use the >>Javascript onUnload event, I can't figure how to commmuncate with the Perl >>process. >> > >I don't remember where I saw this, but I think it might be what you're >looking for. > >while ($dbh->fetch) { > > # format, print, etc. > > last if $r->connection->aborted; >} >$dbh->disconnect; >
Remember that if you're using Apache::DBI, your database connection will be persistant anyway, so that's not a total waste :) The above code's still a good idea (although the $dbh->disconnect will be silently ignored under Apache::DBI) as it will still free the process (or thread soon :)) which is dealing with the current response, which would otherwise still have lots of work to do for a client who's no longer interested. Issac